1、并发
两个或者更多的任务(独立的活动)同时发生(进行):一个程序同时执行多个独立的任务。
以往计算机,单核cpu,某一个时刻只能执行一个任务,由操作系统调度,每秒钟进行多次所谓的“任务切换” 并发的假象(不是真正的并发),这种切换(上下文切换)是要有时间开销的, 比如操作系统要保存你切换时的各种状态,执行进度等信息,都需要时间,一会切换回来的时候要复原这些信息。
现在计算机有双核、4核、8核…出现了多处理器,能够实现真正的并行执行多个任务(硬件并发)。
使用并发的原因:同时可以做多个事情,提到性能。
2、进程
一个可执行程序运行起来了,就叫创建了一个进程。
进程,就是运行起来了的可执行程序。
3、线程
(1)每个进程(执行起来的可执行程序),都有一个主线程,这个主线程是唯一的,也就是一个进程中只能有一个主线程。
(2)当执行了可执行程序,产生一个进程后,这个主线程就随着这个进程默默的启动起来了。
(3)线程:用来执行代码。线程可理解成一条代码的执行通道。
除了主线程之外,可以通过自己编写代码来创建其他线程,其他线程走的是别的道路,甚至去不同的地方。
每创建一个新线程,就可以在同一时刻多做一个不同的事情。
多线程(并发)
线程不是越多越好,每个线程,都需要一个独立的堆栈空间(1M),线程之间的切换要保存很多中间状态;切换会耗费本该属于程序运行的时间。
特点:
(1)线程是用来执行代码的。
(2)把线程理解成一条代码的执行通道,一个新线程代表一条新的通道。
(3)一个进程自动包含一个主线程,主线程随着进程默默的启动并运行,可以通过编码来创建多个其他线程(非主线程)。
(4)创建的数量最大都不建议超过200~300个,至于到底多少个,在实际的项目中可以不断调整和优化,有的时候线程太多反而会降低性能。
(5)因为主线程是自动启动的,所以一个进程中最少也是有一个线程(主线程)。
(6)多线程程序即可以同时做多个事情,运行效率高。但是到底有多高,并不是容易评估和量化。
4、并发的实现方式
一般来说,并发的实现方式有两种:多个进程实现、多线程实现。
多个进程实现:比如账号服务器、游戏逻辑服务器等服务器之间的通信。
进程间通信方法:管道、文件、消息队列、共享内存、socket通信(不同电脑服务器上使用方式)。