Linux网络编程socket模型介绍

socket是我们网络编程所必须的工具;至于什么是socket参考我另外一篇文章:
这个socket主要是讲几种socket的模型:
1。阻塞型socket;
2。非阻塞socket;
3。多路I/O复用;
以一种阻塞模型的socket
我们默认创建的socke都是阻塞模型的socket。
阻塞模型的socket有一下特点
1。没有数据读的时候,这个时候程序会阻塞的到socket的读,单线程程序将无法继续执行;
2。阻塞到一个socket的时候,其他socket也无法读写,所以一般阻塞模型的socket,无法在单线程中执行多个socket自由读写的问题;
3。阻塞的socket,性能一般不高;
4。编程简单
非阻塞的socket编程模型:
非阻塞的socket是为了解决,一个线程中只能有一个socket的问题~这个时候读socket的时候,不是阻塞,而是有数据返回成功,没有数据返回失败;通过返回标记来确认读成功与否。
非阻塞模型一般采用轮训查询的模式,查询读socket成功就进行数据的操作,然后多个socket一次查询;
非阻塞的socket特点:
1。可以支持多socket在一个线程中处理;
2。没有数据来的时候也要花时间去查询时间,浪费CPU;
3。一般采用轮询模式;
多路I/O复用,顾名思义其实是将多个socket事件,几个到一个socke事件中去,从而实现,多个socket在一个线程中同时监听时间的操作。
录入socket1 socket2 socket3 socket4 socket5 这5个socket,之前他们是分别自己监听的,现在把他们放到一个集合socketx中,他们当中有一个有事件发生,这个时候socketx就会阻塞返回;而且集合的socketx也是可以设置阻塞超时的;
常用的多路复用技术有 select poll epoll 。因为epoll已经是最优了,所以一般学习多路复用就学习epoll就OK了。
推荐:
1。一般简单的客户端模型,就是采用阻塞也是可以解决问题的。(tcp client一般connect是阻塞,其他可以多路复用);
2。一般不要采用多线程,每个线程都读写一个socket的模型;
3。一般追求性能就学习epoll就好了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值