进程和线程

  • 程序和进程的关系如同工厂和车间的关系,因为进程是正在运行中的程序,所以是正在进行生产作业的车间;一个工厂可以有多个车间,这些车间有的在运行有的可能不在运行,运行中的车间可以看做是进程;

  • 进程和线程的关系就如同生成车间和生产机床的关系,一个车间如果有多个机床(多线程),那么这些机床同时生产就可以提高效率,当然这些机床可以生产相同的产品也可以生产的是不同产品;

  • 那么多车间(多进程)和多机床(多线程)生产有什么关系和区别呢?首先多车间生产,它的材料是独享的(多进程在执行的时候,其所需数据都会在内存中独自创建一份);多机床的话它的材料是共享的(多线程共享一份数据,在使用的时候会加锁,会有等待时间);车间(进程)和机床(线程)都是在使用时创建,使用完后销毁,所以进程和线程的创建和销毁都会消耗资源和时间。而且这两者是共存的,线程是属于进程的,多进程和多线程也可以同时存在。

  • 进程和线程的执行都消耗cpu资源,对于进程而言,一个cpu核芯在一个时间点只能执行一个进程(不能拆分),所以单线程的进程就会对多线程cpu核芯造成浪费;多线程的进程可以充分发挥多线程cpu核芯的性能。

  • 我们以httpd服务对请求的处理模式为例:
    ①、prefork模式:一个进程处理一个请求(处理完该请求后该进程销毁),多个请求同时来的的时候需要创建多个进程处理;相对稳定,一个进程出现问题不会影响其它进程
    ②、worker模式:一个线程处理一个请求,多进程多线程处理
    ③、event模式:一个进程处理多个请求(同prefork模式的区别,这个进程中的多个请求基于事件驱动可以同时执行,即它没有那么频繁的创建销毁进程)

注:多进程和多线程难以说出绝对的优劣,因为一个进程中多个线程是可以发挥多线程cpu的功能,但是因为它的内存数据是线程共享的,在写一个数据的时候会加锁,也会浪费等待时间。所以具体情况还是根据测试结果而定。当然总的来说还是一个进程中有多个线程会好一些。

你可能感兴趣的:(进程和线程)