朝花夕拾。。。
1.同步 & 异步
同步
在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。
eg: 普通B/S模式(同步):
提交请求-> 等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事。
异步
当一个异步过程调用发出后,调用者不能立即得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。
例如:
ajax请求(异步):请求通过事件触发->服务器处理(这个浏览器仍然可以做其他事情) ->处理完毕
2.阻塞&非阻塞
阻塞
阻塞调用是指调用结果返回之前,当前线程会被挂起,cpu不会给线程分配时间(同步状态下cpu会给线程分配时间),即线程暂停运行。函数只有在得到结果之后才会返回。
非阻塞
如果说线程是程序工作的基本单位、服务是要处理的内容,那么阻塞是指工作线程需要等待服务的响应结果才会处理下一个服务,否则工作线程会一直处于等待状态。非阻塞是指工作线程不需等待结果直接处理下一个服务。
阻塞
服务的执行不依赖Handler返回结果,工作线程直接处理下一个服务。
区别与联系
同步与异步是对应的,它们是线程之间的关系,两个线程之间要么是同步的,要么是异步的。
阻塞与非阻塞是对同一个线程来说的,在某个时刻,线程要么处于阻塞,要么处于非阻塞。
3.多线程&多进程
多进程
多进程就是一次启动多个进程,每个进程至少有一个线程,但多个进程可以一起执行多个任务。一般进程数默认是电脑CPU核数,当你的电脑是四核的时候,你的电脑进程默认就是4个。
多线程
多线程模式就是一次只启动一个进程,但是在这个进程里面可以启动多个线程,这样多个线程就可以一起执行多个任务。
python中的GIL机制使得多线程在每一个时间段内只能处理一个任务,因此效率不高,一般使用多进程。