1并行vs并发
并行和并发在同一时间内都可以执行多任务
并行指的是计算机系统中可以同时执行两个或者多个处理的一种计算方法
并发指的是一个时间段中几个程序都处于运行到运行完毕之间,而处理器只能接受一个处理请求,所以把这几个程序安排轮流进行,因为时间间隔很短,会让你以为两个任务都在运行。
2同步VX异步
同步:在同一个时间内有且只有一个程序可以在运行
异步:在同一个时间内可以多个程序同时运行。ajax
3阻塞VS非阻塞
阻塞:指阻碍堵塞,遇到了故障无法进行,必须wait
非阻塞:指程序可以继续往下执行
总结:同步和异步指的是能不能同时运行,阻塞和非阻塞指的是能不能运行
那么我们引申出以下几个组合概念
同步阻塞:一个线程在等待
异步阻塞:多个线程在等待
同步非阻塞:一个线程在运行
异步非阻塞:多个线程在运行
什么是线程(thread )?什么又是进程?
进程指的是ctrl+alt+del 然后打开任务管理器 这上面的每一个程序都是一个进程,我们可以看到一个电脑中可以同时运行多个进程。这里需要注意的是进程有自己的独立地址空间。
线程是程序执行时的最小单位,他是进程的一个执行流,一个进程可以包含很多个线程,所有线程共享进程的所有资源
进程是资源分配的最小单位(系统分配只会分配到这里不会再进一步了)
线程是程序执行的最小单位(每一个线程都是一个执行流,所谓流好像是IO流?)
进程有自己独立的地址空间,每启动一个进程就会为他分配地址空间,建立数据表来维护代码段,堆栈段和数据段(什么意思啊???建立一个数据表??)。线程是共享进程的数据的,使用相同的地址空间。
线程之间的通信更为方便,同一进程下的线程共享全局变量,静态变量等数据。进程之间的通信需要以IPC的方式进行。处理好同步于互斥是多线程的难点
多进程更健壮,因为一个进程死掉了不会影响其余的进程,因为进程的地址空间是独立的。
而多线程的一个线程挂了,进程也就挂了。