首页

文章

在编程中,什么时候使用多线程

发布网友 发布时间:2022-04-20 04:05

我来回答

3个回答

热心网友 时间:2023-06-29 22:20

每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。

  什么是多线程?

  多线程是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率。线程是在同一时间需要完成多项任务的时候被实现的。

  使用线程的好处有以下几点:

  ·使用线程可以把占据长时间的程序中的任务放到后台去处理

  ·用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度

  ·程序的运行速度可能加快

  ·在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。

  还有其他很多使用多线程的好处,这里就不一一说明了。

  一些线程模型的背景

  我们可以重点讨论一下在Win32环境中常用的一些模型。

  ·单线程模型

  在这种线程模型中,一个进程中只能有一个线程,剩下的进程必须等待当前的线程执行完。这种模型的缺点在于系统完成一个很小的任务都必须占用很长的时间。

  ·块线程模型(单线程多块模型STA)

  这种模型里,一个程序里可能会包含多个执行的线程。在这里,每个线程被分为进程里一个单独的块。每个进程可以含有多个块,可以共享多个块中的数据。程序规定了每个块中线程的执行时间。所有的请求通过Windows消息队列进行串行化,这样保证了每个时刻只能访问一个块,因而只有一个单独的进程可以在某一个时刻得到执行。这种模型比单线程模型的好处在于,可以响应同一时刻的多个用户请求的任务而不只是单个用户请求。但它的性能还不是很好,因为它使用了串行化的线程模型,任务是一个接一个得到执行的。

  ·多线程块模型(自由线程块模型)

  多线程块模型(MTA)在每个进程里只有一个块而不是多个块。这单个块控制着多个线程而不是单个线程。这里不需要消息队列,因为所有的线程都是相同的块的一个部分,并且可以共享。这样的程序比单线程模型和STA的执行速度都要块,因为降低了系统的负载,因而可以优化来减少系统idle的时间。这些应用程序一般比较复杂,因为程序员必须提供线程同步以保证线程不会并发的请求相同的资源,因而导致竞争情况的发生。这里有必要提供一个锁机制。但是这样也许会导致系统死锁的发生。

热心网友 时间:2023-06-29 22:21

多线程的使用主要是用来处理程序“在一部分上会阻塞”,“在另一部分上需要持续运行”的场合。一般是根据需求,可以用多线程,事件触发,callback等方法达到。但是有一些方法是只有多线程能办到的就只有用多线程或者多进程来完成。
举个简单的例子,能理解就行。假设有这样一个程序,
1会不停的处理收到的所有TCP请求。对于每个TCP请求做不同的操作。不能有遗漏
2有很多特定的请求会向一个服务器发送存储的数据,或者是等待用户输入。

来看看。第1个要求很简单。用个while循环就搞定了。但第2个特性呢。一旦在等待用户输入或者是连接服务器时,程序会“阻塞”一段时间,这一段时间内就无法处理其他的TCP请求了。
所以可以利用多线程,每个线程处理不同的TCP请求。这样程序就不会“阻塞”掉了。

热心网友 时间:2023-06-29 22:21

按你要求来解释的,尽量简单明了:

假设,你现在有一个While 1循环负责读取COM1的数据,不能间断。同时,你还需要另外一个While 1循环不间断读取COM2的数据。然后,你需要即时的(real time)对比COM1的数据和COM2的数据,怎么办?

这时候你必须要用到3个线程,线程1读取COM1,线程2读取COM2,线程3做对比。为什么不能一个While 1循环完成?因为是Real Time,如果你读完COM1再读COM2,再对比,你可能已经错过0.1秒了,不符合Real Time的要求
八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 【译】将HTML转为PDF的几种实现方案 变形金刚08动画怎么样 变形金刚08动画的问题 变形金刚08动画日语版剧情介绍 高分!换显卡nvidia控制面板被我卸了,重新安装显卡驱动后没了nvidia控... 我的nvidia控制面板被卸载了 怎么找回啊 卸载后 这个画面看着很奇怪_百 ... 李卓彬工作简历 林少明工作简历 广东工业职业技术学院怎么样 郑德涛任职简历 唐新桂个人简历 土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 戴尔笔记本哪个系列性能好一点??? 关于CPU多线程使用(急) 多线程的适用场景是什么?为啥要用多线程 编程中什么时候使用多线程? python中多线程操作全局变量 DELL各系列笔记本介绍有哪些? 怎么让CPU线程全部使用 在多线程中为什么使用全局变量不能传传递自定义 使用多线程应注意些什么? 在多线程中为什么使用全局变量不能传传递自定义变 C# 多线程的使用。如何使用多线程? 求多线程的全面解释和用途。 “银”的读音是什么? “感统”和“前庭觉”分别是什么意思? 前庭觉失调骑自行车有用吗? 有没有微信公众号文章标题一键生成工具? 请问公众号怎么运营?怎么才能吸引人关注阅读? 怎么让微信公众平台里的电话可以直接拨打 微信公众平台 网页 跳转 如何获取 账号 微信公众平台如何设置被添加自动回复什么意思 怎么理解多线程,为什么要用多线程 戴尔笔记本都有多少钱的? 多线程对全局变量的操作 为什么要使用多线程 什么情况下使用多线程 JAVA中如果程序中用到多线程,全部采用start方法使... 多线程:所有线程执行到一个地方才往下执行,怎么实现 如何用多线程来处理一个问题? C#多线程同用一个全局变量,如何保持每个线程的变... 指针电流表如何接线 指针式电流表的通用型号 期待是什么意思?? 期待是什么意思? 期待的意思是什么? 期待是什么意思? 期待的解释 形容期待的成语 期待的意思 形容“期待”的句子有哪些? “期待”的英文怎么说?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com