《Java并发编程实战》—— 第一章 简介

早期计算机

每次只能运行一个程序

操作系统

每次能运行多个程序,不同的程序都在单独的进程中运行。
操作系统为各个独立执行的进程分配各种资源,包括内存,文件句柄以及安全证书等。
不同的进程之间可以通过一些粗粒度的通信机制来交换数据,包括:套接字、信号处理器、共享内存、信号量以及文件等。

促进进程出现的因素:

  • 资源利用率
  • 公平性
  • 便利性

线程

允许在同一个进程中同时存在多个程序控制流。
线程共享进程范围内的资源,例如内存句柄和文件句柄,但每个线程都有各自的程序计数器、栈以及局部变量等。
——需要一种比在进程间共享数据粒度更细的数据共享机制和明确的同步机制

线程的优势:提升资源利用率,提升系统吞吐率

线程带来的风险:
安全性问题 “永远不发生糟糕的事情”。如竞态条件。
活跃性问题 “某件正确的事情最终会发生”。如死锁、饥饿、活锁。
性能问题 “正确的事情尽快发生”。在多线程程序中,当线程调度器临时挂起活跃线程并转而运行另一个线程时,就会频繁地出现上下文切换操作,这种操作将带来极大的开销:保存和恢复执行上下文,丢失局部性,并且CPU时间将更多地花在线程调度而不是线程运行上。当线程共享数据时,必须使用同步机制,而这些机制往往会抑制某些编译器优化,使内存缓存区中的数据无效,以及增加共享内存总线的同步流量。

猜你喜欢

转载自blog.csdn.net/wsjtwmy/article/details/85253360