VC里面的线程并行与串行的设计思路是怎么样的?
展开全部
假设你的程序是一个WWW服务器,每分钟有可能都有若干数量的客户进行访问。用串行访问写这个程序,是比较复杂的:
x = 所有客户数据库
循环(所有客户){
检查是否有新客户进来,如果有新客户进来,登记到新客户数据库x中
如果有客户需要下载某业务,则分配时间片p进行某业务
}//下一个客户
用并行方式写程序,相对比较简单
某客户线程() {
登录用户名密码,如果失败则直接返回失败页
如果成功,下载内容
正常退出
}
循环() {
等待新客户
如果有新客户,启动一个线程
如果没有新客户,继续等待
}
上面就是并行和串行两种思路。并行思路写程序比较简单,串行则对每一个操作的时间要求非常严格,但是相对来讲比较节省资源。
为什么呢?要知道每个计算机CPU数量是有限的。在很久很久以前,只有一个CPU的时代,所有事情都只有一个CPU去做,换句话说,所有的事情都是串行的,并行操作是在串行操作基础上用一个一个的时间片模拟出来的,可以说,串行是干完一件工作然后接着干下一件,而模拟并行就是每个工作都干一点点,然后飞快地切换到下一个工作。
真正的并行,是在多CPU和多核操作系统基础上彻底完成的,真正提高效率,否则在单核单CPU操作系统上,无论怎么处理,并行和串行基本上耗时都是差不多的。
从现代操作系统理论看来,如果你针对每个任务要做的处理都比较复杂的情况下,最好用多线程/多进程(也就是所谓的并行)方式设计软件,这样逻辑关系比较清楚。自DOS时代终结后,现在很少能够看到真正100%串行的程序了。
在云计算的时代,计算任务都是被调度计算机不知道调度到哪个真正的网络CPU进行计算了,这种方式代表了并行计算的最新潮流。
举个例子说,假设我们有从哈勃望远镜每秒钟对全太空进行一次拍照,现在需要对这个超高清晰度的超级大照片(比如1,048,576×1,048,576=1,099,511,627,776,也就是1G像素,相当与1张照片用1个硬盘进行存储)和上一秒钟的图像做一次比较,尽可能地多找出星星和星座、星云的变化有何不同,那么串行计算就需要CPU进行逐行逐点进行比对。假设这个CPU是每秒100万次的(相当于8086古董计算机),那么处理这1秒钟的照片,用串行方式,需要100万秒,也就是12天才可以完成。
如果是云计算方式,调度计算机会把这1秒钟的1G图像一次性分配各在互联网上的数百万台计算机,每台计算机都只处理这个天空照片的很小的一个区域,处理完后迅速返回给调度计算机,这样处理起来,也许只需要不到1秒钟
人类大脑经过数百万年的进化,已经成为超大规模并行计算的超级神经网络。我来解释一下人脑是如何处理串行和并行的问题的。
还是上面哈勃照片的例子。对于一个没有任何经验普通人,或者一个小朋友来说,对比两张巨幅照片,需要一个很漫长的过程,需要一行一行一点一点逐个比较。或者是完全随机,东看看,西看看,来找找二者有何不同。这样的结果耗时很久,而且对比结果可能不可信(所谓外行看热闹)
对于一个受过专业训练的天文学家来说,这可就大不一样了。首先,他经过成千上万的太空照片观测训练之后,在大脑中形成了“模式识别”的特殊记忆,就是上一张照片和下一张照片的【轮廓】上,不会有很大变化,星座【整体】不会变形,但是【位置坐标】和【比例】【颜色】【亮度】会发生变化,这样他就可以在非常短的时间内,只需要扫一眼,就可以确定大部分【不需要】去仔细分辨的内容,而只观察【显著】差别,这就是【超大规模神经网络】产生的【模式识别】计算能力(所谓的内行看门道)
计算机用并行计算模拟出来的神经网络也是这样的,通过一系列的【样本培训】之后(就是在做具体工作之前,花很多时间在人工智能的学习上),用神经网络进行【模式识别】。这种方式的编程,既不是【串行】,也不是【并行】,而是【训练】+【自动化】。很有意思吧?不过请注意,所谓专家也有走眼的时候,模式识别一旦形成,往往有些【盲区】被【经验惯性】所掩盖,所以【串行】和【并行】比较的是效率,【人工智能】是在精度控制基础上,尽量提高效率。
说了那么多,希望你感兴趣,也能看懂是怎么回事儿。很悲哀啊,我们国家的程序员,一开始学习的时候,就已经落伍了,始终没法走到科技的最前沿。
x = 所有客户数据库
循环(所有客户){
检查是否有新客户进来,如果有新客户进来,登记到新客户数据库x中
如果有客户需要下载某业务,则分配时间片p进行某业务
}//下一个客户
用并行方式写程序,相对比较简单
某客户线程() {
登录用户名密码,如果失败则直接返回失败页
如果成功,下载内容
正常退出
}
循环() {
等待新客户
如果有新客户,启动一个线程
如果没有新客户,继续等待
}
上面就是并行和串行两种思路。并行思路写程序比较简单,串行则对每一个操作的时间要求非常严格,但是相对来讲比较节省资源。
为什么呢?要知道每个计算机CPU数量是有限的。在很久很久以前,只有一个CPU的时代,所有事情都只有一个CPU去做,换句话说,所有的事情都是串行的,并行操作是在串行操作基础上用一个一个的时间片模拟出来的,可以说,串行是干完一件工作然后接着干下一件,而模拟并行就是每个工作都干一点点,然后飞快地切换到下一个工作。
真正的并行,是在多CPU和多核操作系统基础上彻底完成的,真正提高效率,否则在单核单CPU操作系统上,无论怎么处理,并行和串行基本上耗时都是差不多的。
从现代操作系统理论看来,如果你针对每个任务要做的处理都比较复杂的情况下,最好用多线程/多进程(也就是所谓的并行)方式设计软件,这样逻辑关系比较清楚。自DOS时代终结后,现在很少能够看到真正100%串行的程序了。
在云计算的时代,计算任务都是被调度计算机不知道调度到哪个真正的网络CPU进行计算了,这种方式代表了并行计算的最新潮流。
举个例子说,假设我们有从哈勃望远镜每秒钟对全太空进行一次拍照,现在需要对这个超高清晰度的超级大照片(比如1,048,576×1,048,576=1,099,511,627,776,也就是1G像素,相当与1张照片用1个硬盘进行存储)和上一秒钟的图像做一次比较,尽可能地多找出星星和星座、星云的变化有何不同,那么串行计算就需要CPU进行逐行逐点进行比对。假设这个CPU是每秒100万次的(相当于8086古董计算机),那么处理这1秒钟的照片,用串行方式,需要100万秒,也就是12天才可以完成。
如果是云计算方式,调度计算机会把这1秒钟的1G图像一次性分配各在互联网上的数百万台计算机,每台计算机都只处理这个天空照片的很小的一个区域,处理完后迅速返回给调度计算机,这样处理起来,也许只需要不到1秒钟
人类大脑经过数百万年的进化,已经成为超大规模并行计算的超级神经网络。我来解释一下人脑是如何处理串行和并行的问题的。
还是上面哈勃照片的例子。对于一个没有任何经验普通人,或者一个小朋友来说,对比两张巨幅照片,需要一个很漫长的过程,需要一行一行一点一点逐个比较。或者是完全随机,东看看,西看看,来找找二者有何不同。这样的结果耗时很久,而且对比结果可能不可信(所谓外行看热闹)
对于一个受过专业训练的天文学家来说,这可就大不一样了。首先,他经过成千上万的太空照片观测训练之后,在大脑中形成了“模式识别”的特殊记忆,就是上一张照片和下一张照片的【轮廓】上,不会有很大变化,星座【整体】不会变形,但是【位置坐标】和【比例】【颜色】【亮度】会发生变化,这样他就可以在非常短的时间内,只需要扫一眼,就可以确定大部分【不需要】去仔细分辨的内容,而只观察【显著】差别,这就是【超大规模神经网络】产生的【模式识别】计算能力(所谓的内行看门道)
计算机用并行计算模拟出来的神经网络也是这样的,通过一系列的【样本培训】之后(就是在做具体工作之前,花很多时间在人工智能的学习上),用神经网络进行【模式识别】。这种方式的编程,既不是【串行】,也不是【并行】,而是【训练】+【自动化】。很有意思吧?不过请注意,所谓专家也有走眼的时候,模式识别一旦形成,往往有些【盲区】被【经验惯性】所掩盖,所以【串行】和【并行】比较的是效率,【人工智能】是在精度控制基础上,尽量提高效率。
说了那么多,希望你感兴趣,也能看懂是怎么回事儿。很悲哀啊,我们国家的程序员,一开始学习的时候,就已经落伍了,始终没法走到科技的最前沿。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询