- 论坛徽章:
- 15
|
获奖详情:http://bbs.chinaunix.net/thread-4241378-1-1.html
首先,跟大家分享个陈年趣事:
几年前,我去某软公司应聘,电话面试中与面试官有如下一番对话。 面试官:你了解多线程并发吗?
我:不了解,我之前做业务系统,多线程很大程度上都是委托给容器的……
面试官:我理解了。你不太熟悉并发是吗?
我:是的。
面试官:那我们还是来聊一聊并发吧。
祝大家线程安全。
案列介绍:
最初是一个单线程程序性能到达瓶颈后,通过将整个作业切成一个个小任务,每一个任务执行一个线程,运行结果发现居然和之前差不多,通过调试发现其中一个任务执行时间过长,再动态调节该任务的线程数,当发现队列过多时启动新线程来同时进行,结果性能上升不大,再定位发现多个线程竞争需要同步访问同一个资源,修改为静态线程池,再由上游哈希将数据放置不同的线程队列中。
进一步的性能提升发现怎么增大线程数性能都是这样了,再检查发现之前下游任务需要等待上游线程全部完成才能进一步操作,通过查阅资料找到一个算法只要上游有数据就可以开始进行计算,这样到上游全部陆续完成时该步骤也只需要计算少量的数据就可以了。针对此问题您有什么更好的解决方法?
讨论话题:(可任选一个或几个)
1. 阐述一下你设计过的最满意的并发/并行软件架构。
2. 详细描述一下在多线程/进程/协程方式下遇到过的最难解决的问题以及如何解决的
3. 详细讲述一下曾经使用过的最好的并发/并行组件
4. 对并行/并发的某一个理论进行详细的说明
讨论时间:2015年12月15日—2016年1月15日
奖励设置:
活动结束后,我们将选取5位讨论精彩的同学,各送技术图书《七周七并发模型》一本。
![]()
作者: (美)Paul Butcher
译者: 黄炎
丛书名: 图灵程序设计丛书
出版社:人民邮电出版社
ISBN:9787115386069
上架时间:2015-3-13
出版日期:2015 年4月
开本:16开
页码:234
版次:1-1
内容简介:并发编程近年逐渐热起来,Go等并发语言也对并发编程提供了良好的支持,使得并发这个话题受到越来越多人的关注。本书延续了《七周七语言》的写作风格,通过以下七个精选的模型帮助读者了解并发领域的轮廓:线程与锁,函数式编程,Clojure,actor,通信顺序进程,数据级并行,Lambda架构。书中每一章都设计成三天的阅读量。每天阅读结束都会有相关练习,巩固并扩展当天的知识。每一章均有复习,用于概括本章模型的优点和缺陷。
样章试读:
第1章 概述.pdf
(1.11 MB, 下载次数: 49)
---------------------------------------------------------分割线---------------------------------------------------------------------
其实案例我想描述的更清楚一些,因为当时没有时间,现在补充如下:
软件功能描述,通过libpcap抓取Mysql的包,并按照Mysql协议分解后将数据发送到Kafka供后续的分析实现,软件架构如下:
pcapThread---->TcpProcThread----->MysqlProcThread----->KafkaSendThread
各线程作用比较清晰,pcap线程调用libpcap的接口获取抓包,并根据配置排除掉不属于本机或黑名单中的抓包,并将TCP/IP头域将解开有用的放到一个数据结构中
TcpProc线程负责TCP的排序,包括乱序重传等处理,将有效的消息发送到Mysql线程处理,MySQL线程根据MySQL协议提取SQL语句和结果元数据信息组成json格式并调用rdkafka库发送
之前开发为简便实现,各线程之间通信采用出入队列方式,同步采用互斥锁,在QPS比较小的机器上测试正常,但上线到QPS比较大机器上,pcapThread出现丢包且比较严重
同时CPU飚的很高,直接占据单个核的100%,当前通过一些手段,如锁改为条件变量、使用无锁队列等,CPU下降到30%,丢包从30%以上下降到10%以下,但优化还未完成,如果大家有兴趣也可以直接根据这个现实的案例来思考发散。
|
|