<一>网络使用总览--1

 

socket发送接收过程

线程和进程的操作是由程序触发系统接口,最后的执行者是系统;协程的操作则是程序员。

协程的适用场景:当程序中存在大量不需要CPU的操作时(IO),适用于协程

为什么用协程(微线程)。

  好处:  无需线程上下文切换的开销,无需原子操作锁定及同步的开销,方便切换控制简化编程模型,高并发+高扩展性+低成本

  缺点:无法利用多核的资源协程本质上就是一个单线程无需使用多核要结合多进程才能利用多核,进行阻塞操作会阻塞掉整个程序

io阻塞:之前学的进程、线程、协程都是。    阻塞主要是指服务端在accept这里等待的阻塞,客户端在listen这里,

io非阻塞:循环监听,但在最后还会有阻塞,不能称之为异步。

io多路复用:单线程下可实现并发,,,不是异步(异步的概念是不能有一丝阻塞)

  可以监视多个描述符(socket),一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。

  select模块:效率最低,最大连接数1024个,好处:跨平台

  poll模块:比上面只改变了连接数,windows下不能用

  epoll模块:三个里最好,windows下不能用,mac不能用

  selectors.DefaultSelector():模块:根据操作系统的不同自己选择上面一个最好的。

好处就在于单个process就可以同时处理多个网络连接的IO。它的基本原理就是selectpollepoll这个function会不断的轮询所负责的所有socket当某个socket有数据到达了就通知用户进程。

  

io异步非阻塞:全程无阻塞,比前三个都好,但实现难,也有其他缺点,用的不多。

用的较多的是:  1、IO多路复用+多线程  2、 异步+事件触发模型 更加流行

 

文件上传下载就是发送接收保存的过程。

 

posted @ 2018-04-19 09:31  不变的真理  阅读(147)  评论(0)    收藏  举报