python线程与进程的区别?
1、运行方式不同
进程不能单独执行,它只是资源的集合。
进程要操作CPU,必须要先创建一个线程。
所有在同一个进程里的线程,是同享同一块进程所占的内存空间。
2、关系
进程中第一个线程是主线程,主线程可以创建其他线程;其他线程也可以创建线程;线程之间是平等的。
进程有父进程和子进程,独立的内存空间,唯一的标识符:pid。
3、速度
启动线程比启动进程快。
运行线程和运行进程速度上是一样的,没有可比性。
线程共享内存空间,进程的内存是独立的。
4、创建
父进程生成子进程,相当于复制一份内存空间,进程之间不能直接访问
创建新线程很简单,创建新进程需要对父进程进行一次复制。
一个线程可以控制和操作同级线程里的其他线程,但是进程只能操作子进程。
5、交互
同一个进程里的线程之间可以直接访问。两个进程想通信必须通过一个中间代理来实现。
守护线程的作用?
守护线程是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。
守护线程是一种很有用的进程。
Linux的大多数服务器就是用守护线程实现的。比如,Internet服务器inetd,Web服务器httpd等。
同时,守护线程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。
守护线程的编程本身并不复杂,复杂的是各种版本的Unix的实现机制不尽相同,造成不同Unix环境下守护线程的编程规则并不一致。
守护线程最重要的特性是后台运行。
在这一点上DOS下的常驻内存程序TSR与之相似。
其次,守护线程必须与其运行前的环境隔离开来。
这些环境包括未关闭的文件描述符,控制终端,会话和进程组,工作目录以及文件创建掩模等。
这些环境通常是守护线程从执行它的父进程(特别是shell)中继承下来的。
最后,守护线程的启动方式有其特殊之处。
它可以在Linux系统启动时从启动脚本/etc/rc.d中启动,可以由作业规划进程crond启动,还可以由用户终端(通常是shell)执行。
守护线程以及其作用
通常来说,守护线程经常被用来执行一些后台任务,但是呢,你又希望在程序退出时,或者说 JVM 退出时,线程能够自动关闭,此时,守护线程是你的首选。
“只要当前JVM实例中尚存任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束是,守护线程随着JVM一同结束工作,Daemon作用是为其他线程提供便利服务,守护线程最典型的应用就是GC(垃圾回收器),他就是一个很称职的守护者。”
为用户线程提供便利服务的线程就是守护线程,比如JVM中的垃圾回收器就是一种守护线程。
守护线程不止是有JVM自行创建的线程,程序员也可以通过setDaemon(true)的方式,将用户线程转化为守护线程。当然,既然守护线程的唯一作用是为用户线程提供便利服务,所以当程序中仅存在守护线程时,守护线程就没有存在的必要了,JVM会关闭剩下的守护线程并且推出该进程。
进程和线程的区别和联系?
进程和线程是操作系统中两个重要的概念。
区别:
1. 进程是程序的执行实例,是资源分配的基本单位,拥有独立的地址空间和系统资源,可以独立执行;而线程是进程中的一个执行单元,共享进程的地址空间和系统资源。
2. 进程之间是相互独立的,一个进程的崩溃不会影响其他进程;而线程共享进程的资源,一个线程的崩溃可能会导致整个进程的崩溃。
3. 进程切换代价较高,涉及到保存和恢复寄存器、切换内存映射等操作;而线程切换代价较低,只需要保存和恢复寄存器即可。
联系:
1. 进程和线程都是操作系统进行调度和执行的基本单位。
2. 进程和线程都可以并发执行,提高系统的资源利用率和响应速度。
3. 进程和线程之间可以通过进程间通信(IPC)来进行数据交换和同步。
总结来说,进程和线程是操作系统中不同层次的执行单位,进程是资源分配的基本单位,线程是执行的基本单位。进程之间相互独立,线程之间共享资源。进程切换代价高,线程切换代价低。进程和线程之间可以通过IPC进行通信。