
多线程是什么意思?
展开全部
线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,
即不同的线程可以执行同样的函数。
什么是多线程?
多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,
也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。
多线程的好处:
可以提高CPU的利用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,
这样就大大提高了程序的效率。
多线程与单线程的区别
生活举例
你早上上班,正要打卡的时候,手机响了。你如果先接了电话,等接完了,在打卡,就是单线程。
如果你一手接电话,一手打卡。就是多线程。
2件事的结果是一样的。你接了电话且打了卡。
即不同的线程可以执行同样的函数。
什么是多线程?
多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,
也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。
多线程的好处:
可以提高CPU的利用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,
这样就大大提高了程序的效率。
多线程与单线程的区别
生活举例
你早上上班,正要打卡的时候,手机响了。你如果先接了电话,等接完了,在打卡,就是单线程。
如果你一手接电话,一手打卡。就是多线程。
2件事的结果是一样的。你接了电话且打了卡。
展开全部
举个例子,酷狗下载歌曲,你说等他完全下载完再去搜歌,再点下载,再等。还是一边下载,一边搜索一边继续下一个,一边试听?
单线程就是只能一件一件的做完一件事,才能做下一件事。多线程就是做每件事与其他事情无关,不干涉。没有所线程的软件,我举个例子,下载数据,你看不到进度条滚动,因为他在下载,不能刷新进度条控件。下载完了你才看得到,那么进度条就开始显示一个0%,卡主不动,完事了显示个100%,没有灵魂的。
单线程就是只能一件一件的做完一件事,才能做下一件事。多线程就是做每件事与其他事情无关,不干涉。没有所线程的软件,我举个例子,下载数据,你看不到进度条滚动,因为他在下载,不能刷新进度条控件。下载完了你才看得到,那么进度条就开始显示一个0%,卡主不动,完事了显示个100%,没有灵魂的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1。单进程单线程:一个人在一个桌子上吃菜。
2。单进程多线程:多个人在同一个桌子上一起吃菜。
3。多进程单线程:多个人每个人在自己的桌子上吃菜。
多线程的问题是多个人同时吃一道菜的时候容易发生争抢,例如两个人同时夹一个菜,一个人刚伸出筷子,结果伸到的时候已经被夹走菜了。。。此时就必须等一个人夹一口之后,在还给另外一个人夹菜,也就是说资源共享就会发生冲突争抢。
1。对于 Windows 系统来说,【开桌子】的开销很大,因此 Windows 鼓励大家在一个桌子上吃菜。因此 Windows 多线程学习重点是要大量面对资源争抢与同步方面的问题。
2。对于 Linux 系统来说,【开桌子】的开销很小,因此 Linux 鼓励大家尽量每个人都开自己的桌子吃菜。这带来新的问题是:坐在两张不同的桌子上,说话不方便。因此,Linux 下的学习重点大家要学习进程间通讯的方法。
2。单进程多线程:多个人在同一个桌子上一起吃菜。
3。多进程单线程:多个人每个人在自己的桌子上吃菜。
多线程的问题是多个人同时吃一道菜的时候容易发生争抢,例如两个人同时夹一个菜,一个人刚伸出筷子,结果伸到的时候已经被夹走菜了。。。此时就必须等一个人夹一口之后,在还给另外一个人夹菜,也就是说资源共享就会发生冲突争抢。
1。对于 Windows 系统来说,【开桌子】的开销很大,因此 Windows 鼓励大家在一个桌子上吃菜。因此 Windows 多线程学习重点是要大量面对资源争抢与同步方面的问题。
2。对于 Linux 系统来说,【开桌子】的开销很小,因此 Linux 鼓励大家尽量每个人都开自己的桌子吃菜。这带来新的问题是:坐在两张不同的桌子上,说话不方便。因此,Linux 下的学习重点大家要学习进程间通讯的方法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2020-03-23
展开全部
在理解线程之前应先理解进程。操作系统将cpu执行时间切分为约10ms的执行单位。切分的方法是设置电脑的硬件定时器,当定时器时间到时引发硬中断调用操作系统提供的定时器中断处理程序。中断处理程序就会切换其它用户的程序来执行。然后重新启动定时器。用户程序就是操作系统的进程。这里注意进程的分配时间到了进程则必然会切换。当然进程也可主动提前放弃分配的多余时间。如果进程提前放弃,则操作系统立即执行定时器中断处理程序切换其它进程,并重新启动定时器。
有了上面进程的知识就可以讲线程了。前面讲了进程就是用户程序。进程是由多个线程组成的。程序都有一个主线程。为了保持主线程不退出,主线程尾部总是有个条件循环体。这个循环体是包含在操作系统提供的一个函数中。我们只需调用即可。当然也有编程环境将其隐藏。其大体形式
消息循环函数()
{
调用操作系统线程调度函数真正启动本进程的副线程组;//之前启动线程函数只不过是注册了而已。
while(不退出进程)
{
一大堆系统消息检查;// 如果有需处理的消息则调用用户的消息处理程序或操作系统默认消息处理程序。
主动让出cpu指令;
}
}
值的注意的是主线程在消息循环函数之前不是与副线程并行执行的。如果在消息循环体之前有耗时操作,则会占用进程全部时间。导致整个窗口无法处理消息,即窗口假死。
为保持副线程不退出,则与主线程一样需有个条件循环体。副线程都是并行执行的,调度以及分配的执行时间片都不必我们操心。但如果线程操作非即时处理的响应时还是应该用延时函数来让出cpu时间。但这不是为了让你控制让出cpu,而是给你提供了延时执行手段而已。线程延时后,cpu使用率会下降。没有获取线程句柄则线程结束后或程序退出时系统会自动回收资源。但如果获取了句柄则系统需等到你关闭句柄或程序退出时才回收资源,所以没必要时不要获取线程句柄。
有了上面进程的知识就可以讲线程了。前面讲了进程就是用户程序。进程是由多个线程组成的。程序都有一个主线程。为了保持主线程不退出,主线程尾部总是有个条件循环体。这个循环体是包含在操作系统提供的一个函数中。我们只需调用即可。当然也有编程环境将其隐藏。其大体形式
消息循环函数()
{
调用操作系统线程调度函数真正启动本进程的副线程组;//之前启动线程函数只不过是注册了而已。
while(不退出进程)
{
一大堆系统消息检查;// 如果有需处理的消息则调用用户的消息处理程序或操作系统默认消息处理程序。
主动让出cpu指令;
}
}
值的注意的是主线程在消息循环函数之前不是与副线程并行执行的。如果在消息循环体之前有耗时操作,则会占用进程全部时间。导致整个窗口无法处理消息,即窗口假死。
为保持副线程不退出,则与主线程一样需有个条件循环体。副线程都是并行执行的,调度以及分配的执行时间片都不必我们操心。但如果线程操作非即时处理的响应时还是应该用延时函数来让出cpu时间。但这不是为了让你控制让出cpu,而是给你提供了延时执行手段而已。线程延时后,cpu使用率会下降。没有获取线程句柄则线程结束后或程序退出时系统会自动回收资源。但如果获取了句柄则系统需等到你关闭句柄或程序退出时才回收资源,所以没必要时不要获取线程句柄。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
多线程
在计算机编程中,一个基本的概念就是同时对多个任务加以控制。许多程序设计问题都要求程序能够停下手头的工作,改为处理其他一些问题,再返回主进程。可以通过多种途径达到这个目的。最开始的时候,那些掌握机器低级语言的程序员编写一些“中断服务例程”,主进程的暂停是通过硬件级的中断实现的。尽管这是一种有用的方法,但编出的程序很难移植,由此造成了另一类的代价高昂问题。中断对那些实时性很强的任务来说是很有必要的。但对于其他许多问题,只要求将问题划分进入独立运行的程序片断中,使整个程序能更迅速地响应用户的请求。
最开始,线程只是用于分配单个处理器的处理时间的一种工具。但假如操作系统本身支持多个处理器,那么每个线程都可分配给一个不同的处理器,真正进入“并行运算”状态。从程序设计语言的角度看,多线程操作最有价值的特性之一就是程序员不必关心到底使用了多少个处理器。程序在逻辑意义上被分割为数个线程;假如机器本身安装了多个处理器,那么程序会运行得更快,毋需作出任何特殊的调校。根据前面的论述,大家可能感觉线程处理非常简单。但必须注意一个问题:共享资源!如果有多个线程同时运行,而且它们试图访问相同的资源,就会遇到一个问题。举个例子来说,两个线程不能将信息同时发送给一台打印机。为解决这个问题,对那些可共享的资源来说(比如打印机),它们在使用期间必须进入锁定状态。所以一个线程可将资源锁定,在完成了它的任务后,再解开(释放)这个锁,使其他线程可以接着使用同样的资源。
多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。
一个采用了多线程技术的应用程序可以更好地利用系统资源。其主要优势在于充分利用了CPU的空闲时间片,可以用尽可能少的时间来对用户的要求做出响应,使得进程的整体运行效率得到较大提高,同时增强了应用程序的灵活性。更为重要的是,由于同一进程的所有线程是共享同一内存,所以不需要特殊的数据传送机制,不需要建立共享存储区或共享文件,从而使得不同任务之间的协调操作与运行、数据的交互、资源的分配等问题更加易于解决。
在计算机编程中,一个基本的概念就是同时对多个任务加以控制。许多程序设计问题都要求程序能够停下手头的工作,改为处理其他一些问题,再返回主进程。可以通过多种途径达到这个目的。最开始的时候,那些掌握机器低级语言的程序员编写一些“中断服务例程”,主进程的暂停是通过硬件级的中断实现的。尽管这是一种有用的方法,但编出的程序很难移植,由此造成了另一类的代价高昂问题。中断对那些实时性很强的任务来说是很有必要的。但对于其他许多问题,只要求将问题划分进入独立运行的程序片断中,使整个程序能更迅速地响应用户的请求。
最开始,线程只是用于分配单个处理器的处理时间的一种工具。但假如操作系统本身支持多个处理器,那么每个线程都可分配给一个不同的处理器,真正进入“并行运算”状态。从程序设计语言的角度看,多线程操作最有价值的特性之一就是程序员不必关心到底使用了多少个处理器。程序在逻辑意义上被分割为数个线程;假如机器本身安装了多个处理器,那么程序会运行得更快,毋需作出任何特殊的调校。根据前面的论述,大家可能感觉线程处理非常简单。但必须注意一个问题:共享资源!如果有多个线程同时运行,而且它们试图访问相同的资源,就会遇到一个问题。举个例子来说,两个线程不能将信息同时发送给一台打印机。为解决这个问题,对那些可共享的资源来说(比如打印机),它们在使用期间必须进入锁定状态。所以一个线程可将资源锁定,在完成了它的任务后,再解开(释放)这个锁,使其他线程可以接着使用同样的资源。
多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。
一个采用了多线程技术的应用程序可以更好地利用系统资源。其主要优势在于充分利用了CPU的空闲时间片,可以用尽可能少的时间来对用户的要求做出响应,使得进程的整体运行效率得到较大提高,同时增强了应用程序的灵活性。更为重要的是,由于同一进程的所有线程是共享同一内存,所以不需要特殊的数据传送机制,不需要建立共享存储区或共享文件,从而使得不同任务之间的协调操作与运行、数据的交互、资源的分配等问题更加易于解决。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |