并发编程(一)、基础概念

156 阅读3分钟

进程和线程

  • 进程是程序运行资源分配的最小单位
    • 资源包括CPU、内存空间、磁盘IO等
    • 同一个进程中的多个线程共享该进程中的全部资源
    • 进程和线程是相互独立的
    • 进程是计算机上的一次执行活动,当你运行一个程序时就启动了一个进程。程序是死的、静态的,进程是活的、动态的
    • 进程可以分为系统进程和用户进程
      • 系统进程:完成操作系统各项功能的进程
      • 用户进程:用户自己启动的进程
  • 线程是CPU调度的最小单位,必须依赖于进程而存在
    • 线程是进程的一个实体,是CPU调度和分派的最小单位
    • 比进程更小,能独立运行的基本单位
    • 基本上不拥有系统资源,只有一些运行中必要的资源【程序计数器、栈、寄存器】
    • 可以和同一个进程所属线程共享进程中所拥有的全部资源

CPU核心数和线程数的关系

  • 多核心:单芯片多处理器,依靠多个CPU同时并行的运行程序提高效率,是并行处理
  • 多线程:同一个处理器上的多个线程同步执行并共享处理器的执行资源

目前主流的CPU都是多核的,增加核心数的目的就是为了增加线程数,因为操作系统是通过线程来执行任务的,一般情况下,核心数:线程数是1:1,但是intel引入了超线程技术之后,使得核心数:线程数达到了1:2的关系

CPU时间片轮转机制

开发工作中,我们可以随意启动线程不受CPU核心数限制的原因就是:操作系统提供了一种时间片轮转机制

时间片轮转也称为RR调度。每个进程都被分配一个时间段(时间片),即该进程允许运行的时间。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。调度程序所要做的就是维护一张就绪进程列表,当进程用完它的时间片后,它被移到队列的末尾。

结论:进程切换是需要时间的,时间片设得太短会导致过多的进程切换,降低了CPU效率;而设得太长又可能引起对短的交互请求的响应变差。将时间片设为100毫秒通常是一个比较合理的折中

并行和并发

  • 并行:指同时执行不同的任务
  • 并发:指交替执行不同的任务

高并发的意义

  • 充分利用CPU资源
    • 现在的CPU都是多核心的,一个线程只能在一个核心上运行,浪费了CPU的性能
    • 多线程情况下,可以同时在多个CPU的核心上运行多个线程,减少CPU空闲时间,充分利用CPU的运算能力,提高并发量
  • 更快的响应
    • 多个线程同时加载运行,提高响应的速度
  • 代码模块化、异步化
    • 电商系统中的下订单、发通知,就可以分成两个独立的模块分别交给不同线程去处理,这样既增加了异步操作,提升系统性能,又使得程序模块化、清晰化和简单化

使用多线程注意事项

  • 线程间共享资源的安全性
  • 死锁
  • 线程过多导致服务器死机宕机
    • 线程有自己的栈、程序计数器等,每个栈大概占1M,线程过多可能会死机