向Alan Cox——Linux内核的维护者致敬 (转)

C# 多线程详细讲解 C# 多线程详细讲解 一、基本概念 1、进程 首先打开任务管理器,查看当前运行的进程: 从任务管理器里面可以看到当前所有正在运行的进程。那么究竟什么是进程呢? 进程(Process)是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源。一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程。 线程是操作系统分配处理器时间的基本单元,在进程中可以有多个线程同时执行代码。进程之间是相对独立的,一个进程无法访问另一个进程的数据(除非利用分布式计算方式),一个进程运行的失败 阅读详情

今天,Linux以其特有的开放源代码的魅力正逐步深入人心。然而在它出现之前,有谁会想到一个世界级的操作系统是靠分散在全球的几千个开发人员用业余时间创造出来的呢?
   
对于Linux的成功,人们往往会归功于天才Linus Torvalds的奇思妙想和别具一格的项目管理方法。这是毫无疑问的。但是,除了Linus之外,还有一位在开源领域内享有盛誉的高手对Linux开发的管理也至关重要,他就是Alan Cox。下面让我们一起见识一下这位幕后英雄的庐山真面目。
                               
从头再来
    1969
年,Alan Cox出生于英国的伯明翰。他从小就对计算机有着浓厚的性趣,曾使用Commodore PET这种古老计算机学习编程。Cox的第一个作品是一个利用简单的计算机动画来模拟月亮起落的程序。尽管Cox认为它没有多大的实用性,但这的确为他后来所从事的游戏编程奠定了一定基础。
    Cox
认为自己第一个真正的程序是在高中的社会实践活动中完成的。当时,学校组织这种活动的目的是让学生们利用两周的假期参与社会实践,从而认识到自己现有的水平不足以更好地完成令自己感兴趣的工作,以达到激发学生们上大学的热情。
    
但好多学生却领会不了学校的良苦用心,他们虽然联系了大公司,但仅仅是做了两周的杂活,交差了事。而Cox在这方面则是个好学生,他想利用假期学习游戏编程。

于是还没开始放假,他就紧锣密鼓地联系工作,几乎给伯明翰所有相关的公司打了电话。最终,他来到了Adventure International公司,编写了两周的游戏代码。Cox的聪明和勤奋使得公司对他非常感兴趣,两周的实习结束后,公司聘任他为长期兼职程序员。那年,Cox刚满18岁。
    
高中毕业后,Cox进入了位于斯旺西的威尔士大学的计算机系学习。在大学里,Cox相当地活跃,不仅经常与同学讨论问题,而且在学校的计算机协会里小有名气,因此,他在大学里有好多朋友。
    
但是,最令Cox难忘的还是他的忘年之交—Rob Ash。他们的相识也是从讨论问题开始的。当时Cox在课堂上遇到一个棘手的问题,于是他向老师请教,与同学讨论,但得到的回答都无法让他满意。
    
于是,他试着找到了当时学校的系统管理员Rob Ash。尽管Ash非常忙,但他还是十分热情地接待了这位好学的年轻人,并结合自己的经验阐述了他对问题的看法,这使得Cox茅塞顿开。在以后的大学生活中,每当Cox遇到难题时,他总是来找Ash请教和探讨,Ash也总是抽出时间为他耐心地讲解。
    
后来,当Cox回忆起大学里的学习生活时,他认为自己从Rob Ash那里几乎学到了所有的操作系统重要部件的工作原理。Rob Ash是他心中永远的偶像。
   
除了学习和讨论理论知识外,Cox在大学里依然没有放弃对游戏编程的喜爱,并经常为Adventure International做一些兼职工作。这期间,作为主要设计者,他为游戏ABERMUD做了大量的设计乃至编码工作。ABERMUD尽管不是最早的MUD (Multi-User Dungeon)游戏,但却是最早在Internet上发布的MUD游戏,并在20世纪90年代初产生了重要的影响。
    ABERMUD
的设计与开发工作进行得异常艰苦。最初的结果令Cox很不满意,于是他亲自动手修改了一年多,但效果仍不理想,甚至有些地方是越改越糟。经过反复斟酌,Cox决定推翻原来的工作,重新设计编码,并最终取得了成功。
    ABERMUD
的开发使Cox对项目的开发和管理有了深刻的认识。在对该项目的总结中,他认为Fred Brooks在《人月神话》所提到的要做好抛弃最初设计的准备确实是金玉良言。ABERMUD给他最大的教训是,在确信前面的工作有严重错误时,要敢于舍弃原有的设计,从头再来。

                        
众里寻它千百度
    
开发ABERMUDAlan Cox产生了重要的影响,Cox不但具备了一定的项目管理经验,而且还结识了日后为之奋斗的Linux。在推翻原计划从头再来的过程中,Cox越来越感到自己的Amiga计算机已经很难胜任这项工作了。

于是,他模仿Unix的风格编写了大量的代码,来为自己的计算机做最大限度的优化,但古老的Amiga常常令他捉襟见肘,最终他不得不决定为自己换一台新计算机。
    1992
年春,Cox买了一个当时主流的386处理器和一条4MB的内存,然后用它们和自己原来的硬盘组装了一台新电脑。有了新电脑之后,Cox接下来要做的是选一种合适的操作系统作为ABERMUD的开发平台,这使他很伤脑筋。
    Cox
考虑过使用当时已开始流行的DOSWindows 3.0,但这两种操作系统的稳定性很难达到ABERMUD的要求,对他的帮助不大。后来Cox又把目光转向了较为稳定的FreeBSD。他花了好长时间下载了386BSD,但该操作系统需要一块浮点芯片。尽管BSD性能良好,但浮点芯片价格不菲,对于当时的Cox来说不啻为天文数字。
    
值得庆幸的是,这个时候Linux出现了,尽管从技术上讲,当时的Linux在各方面都与BSD相去甚远,但它也有着自身的优势。首先,Linux对硬件的要求不高;其次,其稳定性已能够满足Cox的开发需要;此外,当时的MCC Linux,以及稍后的SLS Linux安装起来也很简单。
    
当然,最令Cox感兴趣的还是Linux是开放源代码的。于是,Cox为自己的新电脑安装了Linux,并从此与Linux结下了10多年的不解之缘。

                               
不拘一格揽人才
    
自从安装了Linux之后,ABERMUD的开发进展顺利。而且,Alan Cox还用它搭建了威尔士大学的BBS,这使得CoxLinux更加情有独钟。在业余时间,CoxLinux写了一个补丁,并发给了Linus。很快Linus就给他回了信,告诉他这个问题已有人解决了。
   
Cox的热情不减,很快又写了一个用于进程计数的补丁,这次被Linus加入了Linux的内核,并先后经过了10个人的修改,一直保存下来。
   
后来,Cox又把Linux安装到了威尔士大学计算机协会的电脑上,试图通过使用Linux,使得学校的BBS每天能够稳定地开放3小时以上。Cox回忆说,他和计算机协会的其它成员可能是最早把Linux用于大型的、多协议网络中的人。这使得他们能够比其它人更早地发现当时Linux在网络方面的许多问题,比如他们用自己的新方法在Linux上实现了TCP/IP协议等。
     Cox
和同学们对发现的错误一一进行改正,并写了许多新代码来弥补从前的漏洞。就这样,Cox把他写的好多补丁合在一起,命名为net2debugged,发给了Linus,并且被采用。就这样,CoxLinus留下了深刻的印象,并被Linus邀请作为Linux网络代码的管理者。
    1994
年,Cox在第一届国际Linux大会上见到了Linus,并与后者就Linux的重要问题进行了深入的探讨。Linus认为,CoxLinux网络代码的管理非常成功,希望他能够管理整个Linux的内核,Cox欣然应允。
    
维护整个Linux的内核无疑是一项艰巨的任务。Cox要做的是每天接收大量的来自世界各地的代码,然后根据自己的经验并结合实际测试进行过滤,把那些自己认为优秀的代码发给Linus,由Linus决定是否采用。

而对于那些不合适的代码,Cox要返回给作者本人,并指出哪些属于想法很好,但实现的却很糟糕;哪些结果很好,但代码本身有错误;哪些代码与原有的内核有冲突等。
     
在这一繁琐的工作过程中,Cox积累了一整套行之有效的、独特的Linux项目管理经验,并经过整理写成了《大教堂、集市和委员会》这一在开源领域内堪称经典的文章。在这些经验中,Cox对人的管理和使用的经验最值得称道。
    
众所周知,Linux的开发人员分散在世界各地,比如Linus来自芬兰,Cox来自英国等。如何让这些来自不同国度、文化背景各异的志愿者齐心协力地工作,是Cox面临的最大难题。事实证明,Cox确实很好地做到了人尽其才,不拘一格。
   
对于那些为Linux写过很多代码的程序员,Cox在表示感谢的同时,总是能够恰当地使用激将法激励他们向更高的目标前进;对于那些水平不是很高,所写的代码被拒绝的作者,Cox则总会详细地指出这些代码为什么被拒绝,可以考虑从哪些方面进行改进。
   
他认为在这方面不要害怕浪费时间,详细地指出问题所在,积极地与作者进行讨论,耐心地解答作者的问题将往往会事半功倍。一次,为了一段被Cox拒绝的代码,他与作者进行了激烈地、反复地讨论。最后,作者心悦诚服,认识到了自己的代码针对性太强,不具备一般性,并不是对绝大多数Linux用户都有用。这之后,这位作者成功地为Linux的内核写了几部分的代码。
   
对于那些非常想参与Linux内核项目,但水平又不高的作者,Cox总是一边鼓励他们,一边耐心地告诉他们从何入手,并尽自己所能来回答他们的各种问题。事实证明,有些人确实通过这种方式成了高手,并为Linux内核做出了很大的贡献。
   
比如,有一位葡萄牙人通过这种方式使自己的水平得到了极大的提高,后来负责Linux IPv6部分工作,并写了75%Linux IPv6的代码。目前,他已成为美国Cisco公司的高级雇员。而对那些没有任何编程经验的志愿者,Cox也总有办法让他们在网络管理、邮件列表管理、书写文档等除编程以外的、其它不可缺少的方面发挥作用。

                      
二号人物的魅力
   
与其它Linux业内重要人物一样,Alan Cox除了维护Linux内核以外,也有自己的工作。他大学毕业后,先后工作于Cable Online公司、3Com公司、CymruNet公司、CERT公司等,甚至连微软公司也曾向他抛出过橄榄枝,但Cox没有接受这一邀请。最后,他来到了Red Hat公司做技术支持工作。
    Red Hat
给了Cox足够的自由,他可以在家中工作,有足够的时间来从事自己心爱的Linux内核的维护工作。
   
除了公司的工作外,Cox每周至少做60小时的Linux内核的维护工作。因此,有人曾传说Cox是个精力极其旺盛的家伙,根本不睡觉。正是他的这种孜孜不倦的工作,使得Linux的内核越来越棒,人们也习惯把他所维护的、尚未公开发布的内核称为Linux内核的AC(Alan Cox)版。
   
此外,Cox有着很大的人格魅力,无论是在Linux内核的维护工作中,还是在Red Hat的技术支持过程中,他对问题的回答总是能够让提问者满意。他认为,能够使别人快乐才是世界上最大的快乐。
    
出色的工作加上特有的人格魅力,使CoxLinux业内赢得了极高的声誉。业内人士普遍认为,没有Alan Cox的杰出的贡献,就不会有Linux今日的辉煌。
    
在著名的计算机作家Nikolai Bezroukov所著的《开源运动先驱》一书中,作者认为在Linux业内,Alan Cox的贡献仅次于Linus Torvalds,是Linux业内的二号人物。就连Linus Torvalds本人也认为,Linux能有今天,Alan Cox功不可没,是他最应该感谢的人!

Unity使用C#的多线程 在unity里边使用多线程做一些事情是非常好的,比如解压资源 更新资源等。因为单开线程的话 不会影响主线程卡顿,这样UI就不会卡了。但是开的线程里边不能执行unity主线程的mono代码。线程启动后,执行完毕自动结束该线程、可以同时启动多个线程做事。 代码如下: using System.Threading; void StartThread()     {         Thread 阅读详情

相关推荐

C#语言的多线程编程

线程是程序执行的最小单位,一个进程可以包含多个线程。多线程的目标是使得程序能够同时执行多个任务,提高资源的利用率和程序的效率。通过多线程,开发者可以将繁重的计算任务分配给多个线程,让它们并行运行,从而缩短整体执行时间。C#语言的多线程编程为我们提供了强大的工具,以提高应用程序的性能和响应速度。通过多个内置类(如ThreadThreadPool和Task)和同步机制(如lockMutex和Semaphore),我们能够有效地管理线程并确保数据的一致性。

2401_90032081的博客 981

Alan Cox

Linux的二号功臣-Alan Cox 今天,Linux以其特有的开放源代码的魅力正逐步深入人心。然而在它出现之前,有谁会想到一个世界级的操作系统是靠分散在全球的几千个开发人员用业余时间创造出来的呢? 对于Linux的成功,人们往往会归功于天才Linus Torvalds的奇思妙想和别具一格的项目管理方法。这是毫无疑问的。但是,除了Linus之外,还有一...

weixin_34380296的博客 832

C#委托的前世今生

我们所以常写的那行代码,其实只是一种简写方式而已,委托的五步法,不管怎么简化,怎么优化,其实本质还是一样,都离开不了这五个步骤。这就是经典。

曾经的我也很优秀,现在的我一无所有。 1529

【历史上的今天】7 月 22 日:Linux 开发的“二把手”出生;苹果发布 OS 8;MSN 发布

7 月 22 日,历史上的今天,Linux 内核开发先驱 Alan Cox 出生;苹果发布 OS 8;MSN Messenger 首个版本发布。

历史上的今天 4036

载:Linux的二号功臣-Alan Cox

载:Linux的二号功臣-Alan Cox     今天,Linux以其特有的开放源代码的魅力正逐步深入人心。然而在它出现之前,有谁会想到一个世界级的操作系统是靠分散在全球的几千个开发人员用业余时间创造出来的呢?     对于Linux的成功,人们往往会归功于天才Linus Torvalds的奇思妙想和别具一格的项目管理方法。这是毫无疑问的。但是,除了Linus之外,还有一位在开源领域内享有...

270

Alan Cox 被斯旺西大学授予荣誉学位

著名内核开发者Alan Cox在7月20日被斯旺西大学授予了荣誉学位。 Linus Torvalds在1991年发布了Linux,引起了当时还是斯旺西大学计算机科学系学生的Alan Cox的注意,从版本0开始就参与了开发。他将Linux安装在斯旺西大学计算机网络的机器上,揭示了很多的网络问题,他后来重写了网络软件。Cox曾是 Linux内核的主要开发者和...

weixin_34072637的博客 170

开源先驱 Alan CoxLinux 的重要推动者

……

u013669912的博客 1159

C# 多线程操作界面主线程示例

[code="c#"] #region ====== invoke ====== //定义一个委托用于跨线程访问方法 delegate void changeLbl(string str, bool bIsAdd); //访问主线程 private void ChangeLbl(string str,bool...

蛋疼先生的手札 524

C#【高级篇】 C# 多线程

线程 被定义为程序的执行路径。每个线程都定义了一个独特的控制流。如果您的应用程序涉及到复杂的和耗时的操作,那么设置不同的线程执行路径往往是有益的,每个线程执行特定的工作。 线程是轻量级进程。一个使用线程的常见实例是现代操作系统中并行编程的实现。使用线程节省了 CPU 周期的浪费,同时提高了应用程序的效率。 到目前为止我们编写的程序是一个单线程作为应用程序的运行实例的单一的过程运行的。但是,这样子应用程序同时只能执行一个任务。为了同时执行多个任务,它可以被划分为更小的线程。 ...

星Yeah 的博客 8533

C#多线程下, 子线程如何让主线程执行方法

C#多线程下, 子线程如何让主线程执行方法 重现一下当时我的需求: 我开了多个线程, 来监视一个变量, 然后去执行一些方法. 看起来没什么毛病, 但是运行起来会报错 此对象被其他线程占用 一开始想着可能是冲突了加入了 lock(a) { someFunction(); } 是不太行的, 发现是主线程占用了, 也就引出了今天的. 如何让主线程去执行 如果是UI子类的话 因为UI一般也就是继承自DispatcherObject, 所以直接获取他的Dispatcher就行 bt1.Dispatcher.Inv

nick131410的博客 3682

C#多线程之子线程与主线程之间的通信

在做多线程传递消息是发生报错,查找到这个方法,可以使用。特此保存: 先说明一下,本人最近遇到了什么问题,就是在写写消息队列的时候,发现消息队列每次接收一个消息的时候都是创建了一个新的线程。 这样就导致了消息处理的时候没有在主线程上进行,然而其中的一些步事项是要通过主线程才能操作的。 这样就引出了一个子线程怎么去通知主线程要做哪些事情呢?为了解决上面的问题我找了好的多资料,好多都是用委托,去解决了, 然后我又看了我的项目通过这种beginInvoker的这种办法解决不是很好用。并不能解决的当前的问题, 在这个

天富儿的博客 1630

C#多线程详解

多线程就是多个线程同时工作的过程,我们可以将线程看作是程序的执行路径,每个线程都定义了一个独特的控制流,用来完成特定的任务。在多线程中执行的第一个线程称为主线程,当 C# 程序开始执行时,将自动创建主线程,而使用 Thread 类创建的线程则称为子线程,您可以使用 Thread 类的 CurrentThread 属性访问线程。C# 是通过扩展 Thread 类来创建线程的,然后使用扩展的 Thread 类调用 Start() 方法开始执行子线程。:当线程实例被创建但 Start 方法未被调用时的状况;

这个人好有趣....hh 4146

C#多线程之(Thread)详解与示例

C# 多线程编程是提高应用程序性能和响应性的有效方式。通过 Thread 类,您可以创建和启动新的线程,管理线程的生命周期,以及实现线程之间的通信。然而,多线程编程也带来了线程安全的问题,需要通过锁、线程局部变量、Concurrent collections 和 Task 等方式来确保数据的一致性和程序的稳定性。执行耗时的计算或IO操作,如文件处理、数据加密、图像处理等。处理用户界面任务,如后台处理、异步更新UI组件等。实现并行算法,提高计算效率,如矩阵计算、科学模拟等。

qq_35320456的博客 9494

C# Winform的多线程(含Gif讲解)

C# Winform的多线程   main函数所在的线程为主线程,所谓的UI线程、界面线程指的就是这个线程。在这个线程里,通过Application.Run()实现了一个死循环,使得窗体能够一直显示1。这有点类似stm32的程序结构,同样都是main函数中通过死循环来实现某个功能。   main函数中定义了一个窗体变量MainForm,MainForm中有两个控件(成员变量),分别为按键变量btn,文本框变量txtDisp,还有两个方法(成员函数),分别为btn_Click()和txtDisp_TextCh

muxi_huang的博客 7421

C#之多线程与线程池

多线程就是多个线程同时工作的过程,我们可以将线程看作是程序的执行路径,每个线程都定义了一个独特的控制流,用来完成特定的任务。如果您的应用程序涉及到复杂且耗时的操作,那么使用多线程来执行是非常有益的。使用多线程可以节省 CPU 资源,同时提高应用程序的执行效率,例如现代操作系统对并发编程的实现就用到了多线程。到目前为止我们编写的示例程序都是单线程的应用程序,这样的应用程序一次只能执行一个任务。

qq_3517289697的博客 1380

C#基础之多线程讲解

进程(Process)是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源。一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程。线程是操作系统分配处理器时间的基本单元,在进程中可以有多个线程同时执行代码。进程之间是相对独立的,一个进程无法访问另一个进程的数据(除非利用分布式计算方式),一个进程运行的失败也不会影响其他进程的运行,Windows系统就是利用进程把工作划分为多个独立的区域的。进程可以理解为一个程序的基本边界。

上善若泪 3200

C# 多线程join的用法,等待多个子线程结束后再执行主线程

等待多个子线程结束后再执行主线程 class MultiThread{  #region join test  public void MultiThreadTest()  {    Thread[] ths = new Thread[2];    ths[0] = new Thread(Method1);    ths[1] = new Thread(Method2);    foreach ...

weixin_33882452的博客 989

c#多线程

总结一下同步方法和异步方法的区别:1、同步方法由于主线程忙于计算,所以会卡住界面。异步方法由于主线程执行完了,其他计算任务交给子线程去执行,所以不会卡住界面,用户体验性好。2、同步方法由于只有一个线程在计算,所以执行速度慢。异步方法由多个线程并发运算,所以执行速度快,但并不是线性增长的(资源可能不够)。多线程也不是越多越好,只有多个独立的任务同时运行,才能加快速度。3、同步方法是有序的。异步多线程是无序的:启动无序,执行时间不确定,所以结束也是无序的。

类人_猿的博客 3509
上一篇: 2005.6.10杂记
下一篇: 菜鸟使用RedHat Linux9.0极品笑话
lianmuweb
博客等级 码龄21年 0粉丝 8原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值