网络编程

来源:互联网 发布:鱼子酱眼精华 知乎 编辑:程序博客网 时间:2024/06/05 18:52

1.Socket通信原理简介

socket 网络套接字,就是在不同的计算机之间进行通信的一个抽象
socket是两个节点之间的数据传输,端点可能处于同一台主机,也可能位于不同的主机中,通常属于C/S架构,一个连接发起者(initiator)另外一个连接侦听者(listener),通常将从事侦听的socket称作“服务器”,将发起连接的套接字称作“客户端”。
TCP握手与socket通信细节:http://www.jianshu.com/p/3f42172f582b

Socket通信原理简介:http://www.jianshu.com/p/90348ef3f41e

2.网络I/O模型

同步模型包括 阻塞I/O,非阻塞I/O,多路复用I/O
阻塞I/O 发送请求后,等返回实际数据在干活,要不一直傻等
这里写图片描述
非阻塞I/O 发送请求是轮询式的,没有数据就回来继续干的其他的,然后再发请求直到最后得到数据拉倒这里写图片描述

多路复用I/O 就是轮询多个socket,哪个有数据了处理哪个
对于多路复用I/O有三种,分别是 select, poll, epoll三种方式
这里写图片描述

异步模型 异步I/O和同步I/O不同,异步不是按顺序执行的,用户进程进行aio_read系统调用后,内核不论数据是否准备好了都直接返回给进程,然后用户态进程就去干其他的事情,等到socket数据准备好了,内核直接复制数据给进程,然后从内核向进程发送通知,I/O两个阶段都是非阻塞的
这里写图片描述

2.同步和异步的区别

同步往往是一个函数调用之后,函数挂起,一直等到获得了结果返回给函数了,函数才继续运行,如果调用函数之后不挂起,虽然没数据返回给函数,但是先让函数继续运行,等数据到达了再通知函数,就是异步的了

阻塞和非阻塞的概念比较容易和同步异步混淆,,阻塞和非阻塞就是说函数是否让线程挂起不往下执行了,通常同步是阻塞的,异步是非阻塞的,那异步有没有阻塞的情况呢,有异步阻塞的情况就是函数调用之后并没有返回结果而是注册了回调函数,非阻塞的情况下,函数马上返回,但是如果不返回,此时就是阻塞的状态,等数据到达通知函数,这是异步阻塞

总结:
区分同步和异步的方法就是看调用函数之后的获取数据的方式,要是挂起一直等着数据就是同步,要是先干其他的,通过回调得数据则是异步
区分阻塞和非阻塞方法就是看调用函数之后函数是否让线程挂起不再往下执行,

深入的
Select 模型简介:http://www.jianshu.com/p/edb9ddd51c3d
Epoll 模型简介: http://www.jianshu.com/p/0fb633010296
积累还不够,只能看懂大概,知其然不知所以然

TCP握手与socket通信细节:http://www.jianshu.com/p/3f42172f582b

写在这里备查,一定要拿下的东西
http://www.zhangdongshengtech.com/article-detials/151
http://wiki.jikexueyuan.com/project/python-actual-combat/tutorial-23.html

原创粉丝点击