并行写的情况计算需要多少个线程

lanse20 2017-11-27 09:18:10
遇到一个题目:
有100万个摄像头,同时工作,并把拍到的图片同时写进计算机。请问需要多少个线程?
如果遇到阻塞,如何解决?
...全文
511 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
red-fly 2017-12-02
  • 打赏
  • 举报
回复
这种题目不要太当真,说说你的看法就行了,实际上是不可能的事。这种题目不会有解,应该只是考考你的想法是否有比较新颖的地方或者了解到其中有哪些难点
赵4老师 2017-11-28
  • 打赏
  • 举报
回复
古有杞人忧天 今有楼主吹牛
danscort2000 2017-11-28
  • 打赏
  • 举报
回复
引用 4 楼 lanse20 的回复:
[quote=引用 2 楼 danscort2000的回复:]100个摄像头同时工作, 那只能是通过网络进行视频流传输,不太可能是在一台电脑上实现100个usb摄像头同时采集吧 网络传输的话, 一般就做个服务器程序用来接收视频流,至于开多少个线程,看你怎么实现网络协议来决定的 先保存到内存缓冲, 然后后台用1到2个线程将缓冲保存到本地磁盘
那个怎么用网络协议,能详细说一下吗?谢谢![/quote] 1 首先,建立一个负载平衡用的服务器, 这个服务器的作用是 当摄像头请求传输数据到服务器的时候,根据底下各服务器目前负载的情况动态给出数据接收服务器的ip地址 同时开启服务,使用内存数据库或者数组的方式,对数据服务器目前的连接已经负载等进行记录,动态更新并维护,用一个算法匹配最合适的服务器给摄像头 2 建立数据接收服务器集群,每一台数据接收服务器与负载均衡服务器连接,并动态报告目前连接的摄像头以及磁盘负载等情况 摄像头的数据一般都采用实时采集压缩的视频流协议传输,分关键桢和普通桢,如果要求数据完整性优先,那么采用TCP传输全部数据 如果不要求完整性,可以采用tcp传输关键桢,udp传输普通桢的方式接收 接收的时候不要在recv后采用立即写盘的操作方式,而应该采用大缓冲数据队列,只有当某一段数据确定传输结束,才通知后台线程执行写盘 这样一般需要的线程数量可以设置为 cpu核心数量 + 2 , 至于你采用epoll 还是 完成端口或者select, 在这个模型里,因为始终是基本满复合运行,因此其实差距基本是0 3 如果数据接受服务器集群本身的radi系统还不够,还需要做备份,那么就增加1到2个线程,执行数据接收服务器集群与远程备份服务器之间的定时备份操作,注意,这个操作只能从磁盘读数据然后备份到远程服务器,如果你想在写入本地磁盘的同时备份到远程服务器,我相信你的代码会挂的很惨
zgl7903 2017-11-28
  • 打赏
  • 举报
回复
100W个 建议你先评估下 每秒钟点数据量有多大 然后评估需要的硬件软件资源
赵4老师 2017-11-28
  • 打赏
  • 举报
回复
引用 12 楼 lanse20 的回复:
[quote=引用 11 楼 赵4老师的回复:]古有杞人忧天 今有楼主吹牛
赵老师,真不是我吹牛,面试碰到的,当时就蒙了[/quote] 那就是面试官吹牛。
lanse20 2017-11-28
  • 打赏
  • 举报
回复
引用 11 楼 赵4老师的回复:
古有杞人忧天 今有楼主吹牛
赵老师,真不是我吹牛,面试碰到的,当时就蒙了
smwhotjay 2017-11-27
  • 打赏
  • 举报
回复
taobao遇到一个题目: 有100万个订单,同时下单,并把下单的记录同时写进计算机。请问需要多少个线程?
食人族哲学家 2017-11-27
  • 打赏
  • 举报
回复
扯淡吧? 哪整100万个摄像头去?是100万像素吧? 真要那么多,也能搞,一台电脑那真是不行。同时工作写硬盘铁定是丢帧的,来不及写。压缩数据,一台电脑都干不过来,必须集群。 算下速度就好,硬盘写速度和摄像头数据传回来的速度。 至于怎么写,一个写线程就OK,硬盘速度满满的,多了也白搭。 多少个接收线程,那得看工作机制了吧,该加锁加锁,盖等待等待。 顺便问下,哪儿能下到VS2010+VA,靠谱的资源。
danscort2000 2017-11-27
  • 打赏
  • 举报
回复
100个摄像头同时工作, 那只能是通过网络进行视频流传输,不太可能是在一台电脑上实现100个usb摄像头同时采集吧 网络传输的话, 一般就做个服务器程序用来接收视频流,至于开多少个线程,看你怎么实现网络协议来决定的 先保存到内存缓冲, 然后后台用1到2个线程将缓冲保存到本地磁盘
oyljerry 2017-11-27
  • 打赏
  • 举报
回复
多少个线程一般跟你CPU核数有关,一般核数*2就差不多了,对于多的来不及处理的图片,可以用一个消息队列的机制放进去,然后消费者多线程取出来进行处理
lanse20 2017-11-27
  • 打赏
  • 举报
回复
引用 6 楼 brk1985的回复:
如果500万个相机同时有成千上万个抓拍,应该涉及到分布式计算了、很复杂了,可能需要一个团队去完成了。 如果允许排队(即实时性要求低些),难度就小多了,线程数设为核数*2,采用IOCP模型。
回去查下ICOP模型,谢谢啦!!!
brk1985 2017-11-27
  • 打赏
  • 举报
回复
如果500万个相机同时有成千上万个抓拍,应该涉及到分布式计算了、很复杂了,可能需要一个团队去完成了。 如果允许排队(即实时性要求低些),难度就小多了,线程数设为核数*2,采用IOCP模型。
lanse20 2017-11-27
  • 打赏
  • 举报
回复
引用 3 楼 smwhotjay的回复:
taobao遇到一个题目: 有100万个订单,同时下单,并把下单的记录同时写进计算机。请问需要多少个线程?
。。。。。。 你怎么回答的啊???
lanse20 2017-11-27
  • 打赏
  • 举报
回复
引用 2 楼 danscort2000的回复:
100个摄像头同时工作, 那只能是通过网络进行视频流传输,不太可能是在一台电脑上实现100个usb摄像头同时采集吧 网络传输的话, 一般就做个服务器程序用来接收视频流,至于开多少个线程,看你怎么实现网络协议来决定的 先保存到内存缓冲, 然后后台用1到2个线程将缓冲保存到本地磁盘
那个怎么用网络协议,能详细说一下吗?谢谢!
从零开始讲述Java多线程的核心知识,通过板书和一步一步画图的方式,引领大家逐步去理解和掌握这些知识;并深入分析源码实现,理解背后的实现原理,知其然还要知其所以然。从多线程核心基础讲起,理解线程的风险,多种创建线程的方式;再到深入理解线程的状态;然后是线程的基本操作。系统、深入、快速上手实现多线程。 课程目标:    快速上手掌握Java多线程的经典课程,    系统、全面、深入掌握Java多线程的核心知识主讲老师:CC老师     20年Java开发和使用经验,多年的首席架构师和CTO,畅销原创书籍《研磨设计模式》的作者。         参与和领导了上百个大中型项目的设计和开发,在互联网应用系统架构、系统设计、    应用级框架和中间件开发等方面具有很多经验和领悟。    更为难得的是,入行20年,仍然奋战在技术一线,深知一线架构师需要掌握哪些技术、    掌握到什么程度、一线架构设计会遇到哪些坑、如何才能做出最合适的架构设计,经验最难得!适应人群:    想要系统、深入学习Java多线程    已有Java开发基础,想要快速掌握Java多线程    补充Java多线程知识,为进入一线大厂做准备学习方式:随到随学课程内容:第一节课:系统理解Java并发编程的知识体系    1:为什么要掌握Java并发编程    2:整个课程的目标    3:整个课程的学习内容第二节课:线程必备基础知识    1:理解线程是什么,理解进程,图示    2:理解轻量级的含义    3:理解时序调度,线程是时序调度的基本单元,图示    4:理解调度方式:抢占式,图示    5:理解我们的程序基本都是多线程的应用,图示    6:理解并发和并行,图示    7:为什么需要线程第三节课:线程的风险    1:线程安全性问题,图示    2:线程的活跃度问题:死锁、饥饿、活锁,图示    3:线程的性能问题,这里主要是线程间切换 上下文的开销第四节课:创建线程的方式之一    1: 代码演示:实现Runnable接口的方式来创建线程    2:学习Thread类的方法和属性的应用    3:学习Thread类的源码第五节课:创建线程的方式之二    1:继承Thread的方式来创建线程    2:继续学习Thread类的源码,分析线程初始化过程    3: 代码演示:演示ThreadGroup    4: 代码演示:演示daemon线程,理解daemon线程和主线程的关系第六节课:创建线程的方式之三    1: 代码演示:匿名内部类的方式来创建线程    2:继续学习Thread类的源码,分析run方法的调用过程    3:代码演示:callable的方式来创建线程,带返回值    4: 学习FutureTask的部分源码,分析run方法到call方法的调用过程第七节课:线程状态详解    1:通过Thread源码来查看线程状态的定义    2:一步一步画图,讲述状态之间的变迁第八节课:线程的基本操作sleep 和yield    1:阅读Thread源码    2:代码演示:sleep的使用    3:代码演示:yield的使用    4:sleep和yield的对比理解第九节课:线程的基本操作join和interrupt    1:阅读Thread源码    2:代码演示:join的使用    3:代码演示:interrupt的使用这里是《Java并发编程与源码分析》的第一部分——讲述多线程核心基础实现快速上手多线程的经典之作   

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧