A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wang29901 中级黑马   /  2013-12-1 23:06  /  1080 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 wang29901 于 2013-12-2 20:16 编辑

求关于多线程的解释

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

3 个回复

倒序浏览
这些是我上周总结的一些东西,分享给你参考下:
  1.   多线程:是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务(代码),也就是说允许单个程序创建多个并行的线程来完成各自的任务。CPU在多个线程之间来回切换执行操作,(这就是所谓的“并发”)
  2.   创建线程之前,我们必须为该线程定义一个方法,这个方法中的代码就是该线程运行所要执行的代码。
  3.   线程在启动时会通过委托调用该方法。(在线程启动的时候,会调用传过来的委托,委托就会执行相应的方法,实现线程执行方法。 微软在写线程这个类的时候并不知道我们将要执行什么代码,所以定义了委托要求我们在创建线程的时候传一个方法进去,告诉线程所要执行的方法)
  4.   
  5.   为什么要使用多线程?
  6.   多线程应用程序将程序划分为多个独立的任务,因此可以在一些方面显著的提高性能:
  7.   、使程序的响应速度更快,因为用户界面可以在进行其它工作的同时一直处于活动状态(不会使用主界面处于无响应的状态);
  8.   、当前线程没有需要进行处理的任务时,可以将处理时间器让给其它任务。
  9.   、占用大量处理时间的任务可以定期将处理器时间让给其它任务。
  10.   、可以随时停止任务。
  11.   、可以分别设置个个任务的优先级以优化性能。
  12.   
  13.   创建多线程的取决因素(最适合采用多线程进行处理的情况):
  14.   、耗时或大量占用处理器的任务阻塞用户界面操作。
  15.   、各任务必须等待外部资源(如远程文件或Internet连接)

  16.   多线程的缺点:
  17.   、等候使用共享资源时造成程序的运行速度变慢。这些共享资源主要是独占性的资源,如打印机等。
  18.   、对线程进行管理要求额外的CPU开销。多线程的使用会给系统带来上下文切换的额外负担。当这种负担超过一定程度时,多线程的特点主要表现在其缺点上,比如用独立的线程来更新数组内的每个元素。
  19.   、线程的死锁。即较长时间的等待或资源竞争以及死锁等多线程症状。
  20.   、对公有变量的同时读写。当多个线程同时对公有变量进行写操作时,后一个线程往往会修改掉前一个线程存放的数据。从而使前一个线程的参数被修改;另外,当公用变量的读写操作是非原子性时,在不同的机器上,中断时的不确定性,会导致数据在一个线程内的操作产生错误,从而产生莫名其妙的错误,而这种错误是程序无法预知的。
复制代码

评分

参与人数 1技术分 +1 收起 理由
V_John + 1 赞一个!

查看全部评分

回复 使用道具 举报
多线程就像一个店里,当只有一个服务员的时候,他不可能同时给多个人服务,另开一个线程,就像又雇佣一个服务员,现在有两个服务员,可以同时为两个客户服务。昨天看到一个帖子,想要用for循环在UI输出9-0的倒计时,这就发生问题了,你不能要求UI线程在计算倒计时的循环的同时,还要求它在UI界面显示出倒计时的结果,所以,for循环可以用另外一个线程完成,UI线程只负责显示结果

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
操作系统使用进程将它们正在执行的不同应用程序分开。线程是操作系统分配处理器时间的基本单元,并且进程中可以有多个线程同时执行代码。每个线程都维护异常处理程序、调度优先级和一组系统用于在调度该线程前保存线程上下文的结构。线程上下文包括为使线程在线程的宿主进程地址空间中无缝地继续执行所需的所有信息,包括线程的 CPU 寄存器组和堆栈。


支持抢先多任务处理的操作系统可以创建多个进程中的多个线程同时执行的效果。它通过以下方式实现这一点:在需要处理器时间的线程之间分割可用处理器时间,并轮流为每个线程分配处理器时间片。当前执行的线程在其时间片结束时被挂起,而另一个线程继续运行。当系统从一个线程切换到另一个线程时,它将保存被抢先的线程的线程上下文,并重新加载线程队列中下一个线程的已保存线程上下文。

时间片的长度取决于操作系统和处理器。由于每个时间片都很小,因此即使只有一个处理器,多个线程看起来似乎也是在同时执行。这实际上就是多处理器系统中发生的情形,在此类系统中,可执行线程分布在多个可用处理器中。

多个线程的优点
无论如何,要提高对用户的响应速度并且处理所需数据以便几乎同时完成工作,使用多个线程是一种最为强大的技术。在具有一个处理器的计算机上,多个线程可以通过利用用户事件之间很小的时间段在后台处理数据来达到这种效果。例如,在另一个线程正在重新计算同一应用程序中的电子表格的其他部分时,用户可以编辑该电子表格。

无需修改,同一个应用程序在具有多个处理器的计算机上运行时将极大地满足用户的需要。单个应用程序域可以使用多个线程来完成以下任务:

通过网络与 Web 服务器和数据库进行通信。

执行占用大量时间的操作。

区分具有不同优先级的任务。例如,高优先级线程管理时间关键的任务,低优先级线程执行其他任务。

使用户界面可以在将时间分配给后台任务时仍能快速做出响应。

多个线程的缺点
建议您使用尽可能少的线程,这样可以最大限度地减少操作系统资源的使用,并可提高性能。线程处理还具有在设计应用程序时要考虑的资源要求和潜在冲突。这些资源要求如下所述:

系统将为进程、AppDomain 对象和线程所需的上下文信息使用内存。因此,可以创建的进程、AppDomain 对象和线程的数目会受到可用内存的限制。

跟踪大量的线程将占用大量的处理器时间。如果线程过多,则其中大多数线程都不会产生明显的进度。如果大多数当前线程处于一个进程中,则其他进程中的线程的调度频率就会很低。

使用许多线程控制代码执行非常复杂,并可能产生许多 bug。

销毁线程需要了解可能发生的问题并对那些问题进行处理。

提供对资源的共享访问会造成冲突。为了避免冲突,必须对共享资源进行同步或控制对共享资源的访问。如果在相同或不同的应用程序域中未能正确地使访问同步,则会导致出现一些问题,这些问题包括死锁和争用条件等,其中死锁是指两个线程都停止响应,并且都在等待对方完成;争用条件是指由于意外地出现对两个事件的执行时间的临界依赖性而发生反常的结果。系统提供了可用于协调多个线程之间的资源共享的同步对象。减少线程的数目使同步资源更为容易。

需要同步的资源包括:

系统资源(如通信端口)。

多个进程所共享的资源(如文件句柄)。

由多个线程访问的单个应用程序域的资源(如全局、静态和实例字段)。

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马