zoukankan      html  css  js  c++  java
  • 多进程多线程

    进程——操作系统资源分配的最小单位

    线程——操作系统CPU调度的最小单位

    进程

    进程产生由来:计算机一次只能执行一个任务,如果某个任务需要从I/O设备读取大量数据,此I/O操作过程中CPU是空闲的,可以用来进行其他操作。因此发明了进程,用进程来对应一个任务。

    进程的特点:每个进程有独立的内存空间,进程间互不相关,由操作系统来进行调度。

    多进程并行:当时CPU还没有多核、多线程的概念,为了达到多进程并行运行的目的,采用了分时的方式,即把CPU的时间分成很多片段,每个片段只能执行某个进程中的指令。虽然从操作系统和CPU的角度来说还是串行处理的,但是由于CPU的处理速度很快,从用户的角度感觉像是多进程并行处理。

    进程间通信:由于每个进程有独立的内存空间,进程间互不相关,但是有时候希望两个进程之间能够进行通信。如果不能通信只能是A存储到磁盘,B需要数据再从磁盘读取,效率低且设计复杂。为了解决进程间通信的问题,设计出了包括管道、消息队列、信号量、共享存储等各种方式。

    线程

    线程产生由来:多进程能让多任务并行处理,但是单个进程内部只能串行处理。实际上进程内部的各个子任务并不要求严格按照时间顺序来执行,也需要并行处理。因此发明了线程。

    线程的特点:线程是进程内部的子任务,共享一份进程数据。为了保证共享数据的准确性,又发明了互斥锁机制。

     

     

    对比维度

    多进程

    多线程

    总结

    数据共享、同步

    数据共享复杂,需要用IPC;数据是分开的,同步简单

    因为共享进程数据,数据共享简单,但也是因为这个原因导致同步复杂

    各有优势

    内存、CPU

    占用内存多,切换复杂,CPU利用率低

    占用内存少,切换简单,CPU利用率高

    线程占优

    创建销毁、切换

    创建销毁、切换复杂,速度慢

    创建销毁、切换简单,速度很快

    线程占优

    编程、调试

    编程简单,调试简单

    编程复杂,调试复杂

    进程占优

    可靠性

    进程间不会互相影响

    一个线程挂掉将导致整个进程挂掉

    进程占优

    分布式

    适应于多核、多机分布式;如果一台机器不够,扩展到多台机器比较简单

    适应于多核分布式

    进程占优

    多进程多线程对比

    https://blog.csdn.net/lishenglong666/article/details/8557215

  • 相关阅读:
    IDEA
    elasticsearch java api
    Java-HttpUtil
    spring集成mybatis-plus
    linux语句速查
    linux切换jdk
    《Java并发编程实战》读书笔记
    设计模式六大原则
    Linux 启动管理
    Linux 日志管理
  • 原文地址:https://www.cnblogs.com/lyrb/p/10645258.html
Copyright © 2011-2022 走看看