- 浏览: 159130 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
北极的。鱼:
几个常用的CSS效果:1.色块透明,文字不透明:设置色块的rg ...
网页前端的浏览器兼容 -
北极的。鱼:
数字证书的作用就是用来说明,里面的公钥是谁的。
数字签名 -
北极的。鱼:
数字证书的作用,其实就是证明,证书里包含的公钥是哪个人的。
数字签名 -
北极的。鱼:
面试题,类似冒泡排序把一个字符串的大写字母放到字符串的后面,各 ...
【转】冒泡排序 -
北极的。鱼:
另一种简单桶排序实现:
using System;
using ...
【转】桶排序(Bucket Sort)
先看一个简单的例子(从网上扒下来的。)
using System; using System.Threading; // Simple threading scenario: Start a static method running // on a second thread. public class ThreadExample { // The ThreadProc method is called when the thread starts. // It loops ten times, writing to the console and yielding // the rest of its time slice each time, and then ends. public static void ThreadProc() { for (int i = 0; i < 10; i++) { Console.WriteLine("ThreadProc: {0}", i); // Yield the rest of the time slice. Thread.Sleep(1000); } } public static void Main() { Console.WriteLine("Main thread: Start a second thread."); // The constructor for the Thread class requires a ThreadStart // delegate that represents the method to be executed on the // thread. C# simplifies the creation of this delegate. Thread t = new Thread(new ThreadStart(ThreadProc)); // Start ThreadProc. On a uniprocessor, the thread does not get // any processor time until the main thread yields. Uncomment // the Thread.Sleep that follows t.Start() to see the difference. t.Start(); //Thread.Sleep(0); for (int i = 0; i < 4; i++) { Console.WriteLine("Main thread: Do some work."); Thread.Sleep(1000); } Console.WriteLine("Main thread: Call Join(), to wait until ThreadProc ends."); if (t.ThreadState == ThreadState.Running) { t.Join(); } Console.WriteLine("Main thread: ThreadProc.Join has returned. Press Enter to end program."); Console.ReadLine(); } }
这是一个很简单的小例子。不过能说明多线程工作的原理(本人刚涉及多线程,如有不对,请各位看官跟贴指出哈~~~~)。
首先呢,还是结合当年大学里学的操作系统原理,讲一下基础知识。
1)进程和线程
简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 进程是程序向操作系统申请资源的基本单位。而线程是不能向操作系统申请资源的,但是他可以和其他线程一起利用父进程申请到的部分资源。正因为要和其他线程一起使用资源,所以必然会发生冲突。这里为了解决冲突呢,我们一般是会对资源进行加锁操作,控制同步基元等(这是后话,这里着重讲解线程的基础知识)。线程是进程中执行运算的基本单位。
2)创建新线程
线程的创建和销毁都可以在另一个线程中执行操作。比如,UI线程,你们都懂的哈~~~~嘎嘎
3)多线程的执行
创建了多线程程序以后,很多人会思考多线程的执行方式。在这里,我依旧援引操作系统原理那门课的理论(哈哈~别骂我哈,各位看官。我们大学的操作系统原理是全国有名的,那位老教授爷爷给我们讲课的那本书都是他自己写的,很猛的)。CPU其实是这么工作的,系统当前维护的所有进程中的线程,默认情况下都是有相同的获得CPU运行时间的权力。这里要解释下,什么叫CPU运行时间?咳咳,其实呢,我们看到的某个程序一直在运行。比如是你在windows操作系统下复制一个文件,你会看到有一个动画,好像一页一页的纸从一个文件夹到另一个文件夹。对,我说的就是那个。那个你看上去是一连贯的动作,其实他不是连贯的,只是现代的计算机的硬件设备实在太先进的,CPU处理速度太快。人类的肉眼根本看不出来其中的间隙。那么我来帮大家解释下这个过程。其实操作系统的所有线程都在CPU上跑(一般情况下有几十上百,甚至上千个线程,那是很正常的)。这些线程,都是要占用CPU,这个不必我说了吧(当然还占用其他系统资源,比如内存!)。那么,这么多线程同时占用CPU,怎么办呢?于是操作系统就把CPU的占用划分成很多的时间片。每个时间片里面执行一个线程。这个时间片一过,那么刚执行的线程就移出CPU的执行,下一个线程进入。如此往返,确保系统维护的所有线程都能被分配到CPU。这个就是CPU时间片(也称时间轮)。(当然,刚说的线程的交替获得CPU时间片的过程中,还涉及到保护现场等的复杂操作,有兴趣的同学可以仔细阅读下操作系统原理。)刚说了,默认情况下系统中各线程获得CPU的时间片的概率是相同的,不过呢,我们可以改变某个线程的权值,提高他的执行优先级。那么这个线程就比其他线程具有更大的获得CPU执行时间片的概率了。额,貌似有点讲深了。嗯,我们先不管各线程的权值不一样的情况,默认各线程的权值都相同,就是获得CPU时间轮的概率相同。那么这个情况下,各个线程是一同在CPU上跑的,一个线程跑的时间片到了,就移出CPU,下个线程进来,各线程交替获得CPU。看上面的程序程序执行结果就能看出来了。不过,如果我把主线程的sleep那段代码注销掉,会怎么样呢?那么理论上是会先把主线程的代码全部执行结束,然后去执行新线程的代码。可是多执行几次看看结果。却发现,不完全是这样的,执行的结果,会不一样。微软的解释是这样的:各位童鞋,这个是正常的情况,相同的多线程程序是会出现一些小的不同的执行结果的。谁也不能保证多线程的程序,执行结果是怎么样的,结果是不可预测的。所以虽然,现代程序有很都需要多线程的处理,但是,我们建议,不到万不得已,请不要使用多线程。因为极容易导致一些不可预知的,且灾难性的后果。
发表评论
-
【转】.NET老程序员推荐的7个开发类工具
2016-02-01 18:27 608很幸运工作以来一直是.NET + SQL Server 的开 ... -
【转】LAMDA表达式学习
2015-07-27 01:48 688转自: http://www.cnblogs.com/Tey ... -
深入.NET托管堆(managed heap)
2014-12-28 17:26 898转自http://blog.sina.com.cn/s/b ... -
C#中关于托管资源和非托管资源
2014-12-28 15:16 535转自百度文库 下面说一下在C#中使用托管资源和非托 ... -
[转]net GC
2014-09-17 22:02 581转自:http://blog.csdn.net/sykpb ... -
C#技术漫谈之垃圾回收机制(GC)
2014-07-22 00:15 850转自:http://kb.cnblogs.com/page ... -
Lambda表达式的前世今生
2014-07-10 22:58 739转自: http://www.cnblogs.com/Oce ... -
Net托管世界的应用程序域和线程
2014-05-17 01:41 1254转载:http://www.360doc.com/conte ... -
后台用C#发起HttpWeb请求
2014-09-17 22:03 783public static string HttpPost ... -
silverlight中的控件pivotviewer。
2012-02-17 17:33 1487最近的一个项目需要用到silverlight中的控件pivot ... -
【转】C#XML读写
2011-08-16 09:07 866一.前言: XML是微软.Net战略的一个重要组成部分,而 ... -
【转】盗链问题
2011-07-08 11:18 1078盗链 的危害我就不说了,网上有很多。 直接分析盗链原理 ... -
【转】C#-ADO.Net连接池和连接字符串剖析
2011-06-01 15:48 1980连接到数据库服务器通 ... -
【转】C# Sql连接池
2011-06-01 14:35 1713使用连接池 连接到数 ... -
【转】C#实现连接池
2011-06-01 11:04 2553转自:http://www.cnblogs.com ... -
关于C#中的特性小例子
2011-05-26 14:37 1029最近要写一个网络报表。 众所周知,网络报表是程序员的一大噩梦 ... -
【转】const 与 readonly知多少
2011-05-23 10:25 897转自:http://www.cnblogs.c ... -
【转】Message Queue(微软消息队列)
2011-05-20 11:52 933Message Queue(微软消息队列) Mes ... -
C#解析Json的类
2011-04-13 16:53 1566网上转的,自己没测试过。大家有好的方法请跟帖共享,最好是要自己 ... -
c#获得元数据转JSON数据格式
2011-04-13 16:50 1220代码经过测试(非本人),看官有更好的后台数据转JSON的方法请 ...
相关推荐
通过JAVA运用多线程控制球的运动,通过窗口中的滑条,对球的大小和颜色进行选择后,随机从窗口左右两方择一进入,小球在遇到障碍或边界后会折回。
Java多线程小游戏是学习Java并发编程的一个经典实践案例,它可以帮助开发者深入理解线程的创建、同步、通信以及管理。在这个课程设计或毕业设计项目中,学生通常会被要求实现一个能够展示多线程特性的游戏,比如经典...
在编程领域,多线程是实现并发执行任务的重要机制,特别是在现代计算机系统中,多核处理器使得多线程成为提高程序性能的关键手段。C#语言提供了丰富的多线程支持,让我们能够编写出高效的多线程应用程序。在这个"多...
标题中的“pb9多线程控件”指的是在PowerBuilder 9.0(PB9)环境中,使用的一种能够实现真正多线程功能的组件或技术。PowerBuilder是一款经典的面向对象的开发工具,主要用于构建数据库应用系统。在PB的早期版本中,...
Qt中利用OpenCV2.4.4多线程打开多摄像机 每个线程处理一个摄像机,从中拿出帧显示...只是个多线程的小例子,还有很多不足之处,有待各位完善。 注意:pro文件中的include和lib文件目录需要根据自己电脑上的情况重新配置
基于SpringBoot和POI实现单线程和多线程导出Excel.zip基于SpringBoot和POI实现单线程和多线程导出Excel.zip基于SpringBoot和POI实现单线程和多线程导出Excel.zip基于SpringBoot和POI实现单线程和多线程导出Excel.zip...
在.NET框架中,C#语言提供了强大的多线程支持,使得开发者可以充分利用现代多核处理器的优势,实现并行处理和高效能编程。本资源包含六个C#.NET多线程的实例,涵盖了多线程的基本使用到更高级的概念,如线程互斥。...
串口通信的实现,编程环境为C#,实现技术采用了多线程方式
本文将详细探讨PB(包括PB9、PB12.5以及PB.NET)实现多线程的方法。 一、PB9的多线程实现 在PB9中,虽然官方并未直接支持多线程,但开发者可以通过使用Windows API函数来实现。一种常见的方式是创建一个新的窗口类...
在C#编程中,多线程技术常用于提高应用程序的执行效率,特别是在处理数据库操作时。SQLite是一款轻量级、嵌入式的关系型数据库,它广泛应用于桌面应用、移动设备和Web开发。当多线程环境对SQLite进行读写操作时,...
.NET框架的多线程技术是开发高性能应用程序的关键组成部分,特别是在处理并发操作、并行计算以及UI更新时。在.NET 2.0版本中,多线程功能已经得到了充分的优化和增强,允许开发者构建出更加高效的应用程序。下面将...
在编程领域,多线程是实现并发执行任务的关键技术,特别是在C#这样的语言中,它提供了丰富的多线程支持。本文将深入探讨C#中的多线程实例,以帮助开发者理解如何有效地利用多核处理器资源,提高程序的执行效率。 多...
在编程领域,尤其是在开发高效、响应迅速的应用程序时,多线程技术扮演着至关重要的角色。Qt5框架提供了一种方便的方式来实现多线程,它允许开发者在不同的线程中执行任务,从而避免主线程(GUI线程)因处理耗时操作...
Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式...
Qt 多线程及简单实例 demo。 多线程的几大特点: 1.多线程的执行顺序无法保证,与操作系统的调度策略和线程优先级等因素有关。 2.多线程的切换可能发生在任何时刻、任何地点。 3.多线程对代码的敏感度高,因此对...
本文将深入探讨在.NET框架中用于多线程同步的三个主要工具:Monitor、Mutex和EventWaitHandle,并结合提供的"五个多线程同步应用小程序",解释它们的应用场景和使用方法。 首先,我们来看Monitor类。Monitor是.NET...
- **并发策略**:可以采用“任务分割”策略,将大文件拆分成多个小任务,每个任务由一个线程处理。通过`ExecutorService`提交任务到工作队列,实现并行处理。 - **线程池管理**:使用`ExecutorService`可以更有效...
### Java多线程操作数据库:深入解析与应用 在当今高度并发的应用环境中,Java多线程技术被广泛应用于处理数据库操作,以提升系统的响应速度和处理能力。本文将基于一个具体的Java多线程操作数据库的应用程序,深入...
多线程是实现复杂任务并发执行的关键技术,能够提高资源利用率,优化系统响应时间。在STM32上实现多线程,通常会借助实时操作系统(RTOS)如RT-Thread。 RT-Thread是一个轻量级、开源的实时操作系统,它为STM32等微...
本教程通过一个简单的小例子来讲解如何在VB 6.0中实现多线程。 首先,我们要了解线程是什么。线程是程序中的执行流程,每个线程负责一部分任务,这样可以使得程序在等待某个任务完成时,其他任务仍然能够继续执行。...