《Python 多线程》 可以跟这篇文章进行比较
from multiprocessing import Process import time def work(x, n): print(x) time.sleep(2) print(n) def otherWork(x, n): print(x) time.sleep(2) print(n) if __name__ == '__main__': p = Process(target=work, args=("Hello world", 1)) p.start() p1 = Process(target=otherWork, args=("Hello world", 2)) p1.start()
输出:
Hello world
Hello world
1
2
在主进程中的p.join()函数,如果加上join的话就是先让一个进程执行完了之后,然后在执行新的进程,这时候就会阻塞这这里,如果没有这个join的话,这几个进程的输出的同时的。
进程和线程的区别
一个进程中的各个线程与主进程共享相同的资源,与进程间互相独立相比,线程之间信息共享和通信更加容易(都在进程中,并且共享内存等)。
线程一般以并发执行,正是由于这种并发和数据共享机制,使多任务间的协作成为可能。
进程一般以并行执行,这种并行能使得程序能同时在多个CPU上运行;
区别于多个线程只能在进程申请到的的“时间片”内运行(一个CPU内的进程,启动了多个线程,线程调度共享这个进程的可执行时间片),进程可以真正实现程序的“同时”运行(多个CPU同时运行)。
一般来说,在Python中编写并发程序的经验:
计算密集型任务使用多进程 IO密集型(如:网络通讯)任务使用多线程,较少使用多进程。这是由于 IO操作需要独占资源,比如:网络通讯(微观上每次只有一个人说话,宏观上看起来像同时聊天)每次只能有一个人说话文件读写同时只能有一个程序操作(如果两个程序同时给同一个文件写入 ‘a’, ‘b’,那么到底写入文件的哪个呢?) 都需要控制资源每次只能有一个程序在使用,在多线程中,由主进程申请IO资源,多线程逐个执行,哪怕抢占了,也是逐个运行,感觉上“多线程”并发执行了。 如果多进程,除非一个进程结束,否则另外一个完全不能用,显然多进程就“浪费”资源了。
线程和进程各自有什么区别和优劣呢?
- 进程是资源分配的最小单位,线程是程序执行的最小单位。
- 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
- 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。
- 但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。
http://www.codeblogbt.com/archives/65100