JUC并发编程第一章之进程/并发/异步的概念[理解基本概念]


1. 进程和线程的概念

进程:

  • 系统正在运行的一个应用程序;程序一旦运行就是一个进程;进程是资源分配的最小单位

线程:

  • 是进程的实际运行单位;一个人进程可以并发控制多个线程,每条线程并行执行不同的任务

区别:

  • 进程基本上相互独立的;而线程存在于进程内,是进程的一个子集
  • 进程拥有共享的资源,如内存空间等,供其内部的线程共享
  • 进程间通信较为复杂(同一台计算机的进程通信称为 IPC,不同计算机之间的进程通信,需要通过网络,并遵守共同的协议,例如 HTTP)
  • 线程通信相对简单,因为它们共享进程内的内存,一个例子是多个线程可以访问同一个共享变量
  • 线程更轻量,线程上下文切换成本一般上要比进程上下文切换低

2. 并发和并行的概念

并发:

  • 两个或多个事件在同一时间间隔发生
  • 例: 家庭主妇做饭、打扫卫生、给孩子喂奶,她一个人轮流交替做这多件事,这时就是并发

并行:

  • 并行是指两个或者多个事件在同一时刻发生
  • 例: 家庭主妇雇了个保姆,她们一起做这些事,这时既有并发,也有并行(这时会产生竞争,例如锅只有一口,一个人用锅时,另一个人就得等待)雇了3个保姆,一个专做饭、一个专打扫卫生、一个专喂奶,互不干扰,这时是并行

3. 异步和同步的概念

同步:

  • 需要等待结果返回,才能继续运行就是同步

异步:

  • 不需要等待结果返回,就能继续运行就是异步

总结

  • 单核 cpu 下,多线程不能实际提高程序运行效率,只是为了能够在不同的任务之间切换,不同线程轮流使用cpu ,不至于一个线程总占用 cpu,别的线程没法干活
  • 多核 cpu 可以并行跑多个线程,但能否提高程序运行效率还是要分情况的
  • IO 操作不占用 cpu,但是会堵塞线程; 只是我们一般拷贝文件使用的是【阻塞 IO】,这时相当于线程虽然不用 cpu,但需要一直等待 IO 结束,没能充分利用线程。所以才有后面的【非阻塞 IO】和【异步 IO】优化

热门相关:首席的独宠新娘   第一神算:纨绔大小姐   薄先生,情不由己   网游之逆天飞扬   大神你人设崩了