关闭

新书预告:《Linux 多线程服务端编程:使用 muduo C++ 网络库》

标签: c++C++linuxLinuxLINUXsockets多线程编程
42483人阅读 评论(16) 收藏 举报
分类:

看完了 W. Richard Stevens 的传世经典《UNIX 网络编程》, 能照着例子用 Sockets API 编写 echo 服务, 却仍然对稍微复杂一点的网络编程任务感到无从下手? 书中示例代码把业务逻辑和 Sockets 调用混在一起,似乎不利于将来扩展?网络编程中的遇到一些具体问题该怎么办?例如

  • 程序在本机测试正常,放到网络运行上就经常出现数据收不全的情况?
  • TCP 协议真的有所谓的“粘包问题”吗?该如何设计打包拆包的协议?又该如何编码实现才不会掉到陷阱里?
  • 带外数据(OOB)、信号驱动IO这些高级特性到底有没有用?
  • 网络协议格式该怎么设计?发送 C struct 会有对齐方面的问题吗?对方不用 C/C++ 怎么通信? 将来服务端软件升级,需要在协议中增加一个字段,现有的客户端就必须强制升级?
  • 要处理几千上万的并发连接,似乎书上讲的传统 fork() 模型应付不过来,该用哪种并发模型呢? 试试 select、poll、epoll 这种 IO 复用模型吧,又感觉非阻塞IO陷阱重重,怎么程序的 CPU 使用率一直是100%?
  • 要不改用现成的 libevent 网络库吧,怎么查询一下数据库就把其他连接上的请求给耽误了? 
  • 再用个线程池吧。万一发回响应的时候对方已经断开连接了怎么办?会不会串话?
读过《UNIX 环境高级编程》,想用多线程来发挥多核 CPU 的效率, 但对程序该用哪种多线程模型感到一头雾水? 有没有值得推荐的适用面广的多线程 IO 模型? 互斥器、条件变量、读写锁、信号量这些底层同步原语哪些该用哪些不该用? 有没有更高级的同步设施能简化开发? 《UNIX 网络编程(第二卷)》介绍的那些琳琅满目的IPC机制到底用哪个才能兼顾开发效率与可伸缩性?
网络编程和多线程编程的基础打得差不多,开始实际做项目了,更多问题扑面而来:
  • 网上听人说服务端开发要做到 7x24 运行,为了防止内存碎片连动态内存分配都不能用, 那岂不是连 C++ STL 也一并禁用了?硬件的可靠性高到值得去这么做吗?
  • 传闻服务端开发主要通过日志来查错,那么日志里该写些什么?日志是写给谁看的?怎样写日志才不会影响性能?
  • 分布式系统跟单机多进程到底有什么本质区别?心跳协议为什么是必须的,该如何实现?
  • C++ 的大型工程该如何管理?库的接口如何设计才能保证升级的时候不破坏二进制兼容性?

这本《Linux 多线程服务端编程》中,作者凭借多年的工程实践经验试图解答以上疑问。当然,内容还远不止这些……


本书配套页面: http://chenshuo.com/book ,将不定期更新。

7
3

猜你在找
深度学习基础与TensorFlow实践
【在线峰会】前端开发重点难点技术剖析与创新实践
【在线峰会】一天掌握物联网全栈开发之道
【在线峰会】如何高质高效的进行Android技术开发
机器学习40天精英计划
Python数据挖掘与分析速成班
微信小程序开发实战
JFinal极速开发企业实战
备战2017软考 系统集成项目管理工程师 学习套餐
Python大型网络爬虫项目开发实战(全套)
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3177009次
    • 积分:24189
    • 等级:
    • 排名:第241名
    • 原创:144篇
    • 转载:3篇
    • 译文:2篇
    • 评论:3297条
    公告
    本人博客的文章均为原创作品,除非另有声明。个人转载或引用时请保留本人的署名及博客网址,商业转载请事先联系。我不使用即时聊天工具。也请不要用 CSDN 站内信、私信、短消息或者留言功能跟我联系。我的 gmail 用户名是 giantchen,微博 http://weibo.com/giantchen。
    陈硕的微博
    最新评论
    g