C中的多线程-入门

多线程在 Visual C#网络编程中的应用网络应用程序的一般都会或多或少的使用到线程,甚至可以说,一个功能稍微强大的网络应用程序总会在其中开出或多或少的线程,如果应用程序中开出的线程数目大于二个,那么就可以把这个程序称之为多线程应用程序。那么为什么在网络应用程序总会和线程交缠在一起呢?这是因为网络

C中的多线程-入门Tag内容描述:

1、问题的时候往往需要花费很多的时间,如果不使用线程,则程序在执行时的就会表现出如运行速度慢,执行时间长,容易出现错误、反应迟钝等问题。
而如果把这些可能造成大量占用程序执行时间的过程放在线程中处理,就往往能够大大提高应用程序的运行效率和性能和获得更优良的可伸缩性。
那么这是否就意味着应该在网络应用程序中广泛的使用线程呢?情况并非如此,线程其实是一把双刃剑,如果不分场合,在不需要使用的地方强行使用就可能会产生许多程序垃圾,或者在程序结束后,由于没有能够销毁创建的进程而导致应用程序挂起等问题。
所以如果你认为自己编写的代码足够快,那我给你的建议还是别使用线程或多线程。
这里要提醒诸位的是如果您对在 Windows 下的线程和其执行原理和机制还不十分清楚,可以先参阅一下介绍 Windows 操作系统方面的书籍,它们一般都会对其进行比较详细的阐述。
然后再阅读本文。
一、简介在 Visual C中创建和使用线程:Visual C中使用的线程都是通过自命名空间 System.Threading 中的 Thread 类经常实例化完成的。
通过 Thread 类的构造函数来创建可供 Visual C使用的线程。

2、以执行同样的函数。
多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。
浏览器就是一个很好的多线程的例子,在浏览器中你可以在下载 JAVA 小应用程序或图象的同时滚动页面,在访问新页面时,播放动画和声音,打印文件等。
多线程的好处在于可以提高 CPU 的利用率任何一个程序员都不希望自己的程序很多时候没事可干,在多线程程序中,一个线程必须等待的时候,CPU 可以运行其它的线程而不是等待,这样就大大提高了程序的效率。
然而我们也必须认识到线程本身可能影响系统性能的不利方面,以正确使用线程:线程也是程序,所以线程需要占用内存,线程越多占用内存也越多 多线程需要协调和管理,所以需要 CPU 时间跟踪线程 线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题 线程太多会导致控制太复杂,最终可能造成很多 Bug基于以上认识,我们可以一个比喻来加深理解。
假设有一个公司,公司里有很多各司其职的职员,那么我们可以认为这个正常运作的公司就是一个进程,而公司里的职员就是线程。
一个公司至少得有一个职员。

3、,该容器需要 Windows 2000 以上系统支持,因为其中某些方法调用了只有高版本的 Windows 才有的 API 函数。
将线程安放在线程池里,需使用 ThreadPool.QueueUserWorkItem()方法,该方法的原型如下:/将一个线程放进线程池,该线程的 Start()方法将调用 WaitCallback 代理对象代表的函数public static bool QueueUserWorkItem(WaitCallback);/重载的方法如下,参数 object 将传递给 WaitCallback 所代表的方法public static bool QueueUserWorkItem(WaitCallback, object);ThreadPool 类是一个静态类,你不能也不必要生成它的对象。
而且一旦使用该方法在线程池中添加了一个项目,那么该项目将是无法取消的。
在这里你无需自己建立线程,只需把你要做的工作写成函数,然后作为参数传递给ThreadPool.QueueUserWorkItem()方法就行了,传递的方法就是依靠 WaitCallback代理对象,而线程的。

4、,该容器需要 Windows 2000 以上系统支持,因为其中某些方法调用了只有高版本的 Windows 才有的 API 函数。
将线程安放在线程池里,需使用 ThreadPool.QueueUserWorkItem()方法,该方法的原型如下:/将一个线程放进线程池,该线程的 Start()方法将调用 WaitCallback 代理对象代表的函数public static bool QueueUserWorkItem(WaitCallback);/重载的方法如下,参数 object 将传递给 WaitCallback 所代表的方法public static bool QueueUserWorkItem(WaitCallback, object);ThreadPool 类是一个静态类,你不能也不必要生成它的对象。
而且一旦使用该方法在线程池中添加了一个项目,那么该项目将是无法取消的。
在这里你无需自己建立线程,只需把你要做的工作写成函数,然后作为参数传递给ThreadPool.QueueUserWorkItem()方法就行了,传递的方法就是依靠 WaitCallback代理对象,而线程的。

5、解一下它的硬件基础。
熟悉电脑硬件的朋友肯定对 DMA 这个词不陌生,硬盘、光驱的技术规格中都有明确 DMA 的模式指标,其实网卡、声卡、显卡也是有 DMA 功能的。
DMA 就是直 接内存访问的意思,也就是说,拥有 DMA 功能的硬件在和内存进行数据交换的时候可以不消耗 CPU 资源。
只要 CPU 在发起数据传输时发送一个指令,硬件就开 始自己和内存交换数据,在传输完成之后硬件会触发一个中断来通知操作完成。
这些无须消耗 CPU 时间的 I/O 操作正是异步操作的硬件基础。
所以即使在 DOS 这样的单进程(而且无线程概念)系统中也同样可以发起异步的 DMA 操作。
异步和多线程的区别之线程的本质线程不是一个计算机硬件的功能,而是操作系统提供的一种逻辑功能,线程本质上是进程中一段并发运行的代码,所以线程需要操作系统投入 CPU 资源来运行和调度。
异步和多线程的区别之异步操作的优缺点因为异步操作无须额外的线程负担,并且使用回调的方式进行处理,在设计良好的情况下,处理函数可以不必使用共享变量(即使无法完全不用,最起码可以减少 共享变量的数量),减少了死锁的可能。
当然异步操作也并非完美无暇。
编写异。

6、而且 线程可以跨越应用程序域的范围,某个线 程中的方法可以调用另一个线程的方法, 这样的话就不会造成进程间调用或进程间切换等方面的额外开销。
可以说应用程序域是物理进程(也即 win32 中的Process)内的逻辑进 程。
在 Visul C#中 System.Threading 命名空间提供一些使得可以 进行多线程编程的类和接口,其中线程的创建有以下三种方法:Thread、 ThreadPool、Timer。
下面我就它们的使用方法逐个作一简单介绍。
1 Thread这也许是最复杂的方法,但它提供了 对线程的各种灵活控制。
首先你必须使用它的构造函数创建一个线程实例,它的参数比 较简单,只有一个 ThreadStart 委托:C#public Thread(ThreadStart start);然后调用 Start()启动它,当然你可以利用它的 Priority 属性来设置或获得它的运行优先级(enum ThreadPriority: Normal、 Lowest、 Highest、 BelowNormal、 AboveNormal)。
见下例:它首先生成了两个线程实例 t1 和 t2,。

7、ThreadTest static void Main() Thread t = new Thread (WriteY);t.Start(); / 在新的线程中运行 WriteYwhile (true) Console.Write (“x“); / 不停地写xstatic void WriteY() while (true) Console.Write (“y“); / 不停地写yxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyy yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy yyyyyyyyyyyyyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx .主线程创建了一个。

【C中的多线程-入门】相关DOC文档
多线程在Visual C#网络编程中的应用.doc
C#多线程的详细教程.doc
C#中异步和多线程的区别.doc
C#中的多线程编程.doc
C#中的多线程-入门.doc
标签 > C中的多线程-入门[编号:349002]

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报