欢迎讨论C#中的线程,多线程。

exception92 2017-11-13 05:40:06
加精
线程,多线程这两个词在问题类别中提及的很多,好多初学者,甚至工作几年的人都没有完全理解各种线程之间的关系及作用(包括我)。
帖子的目的就是为了讨论主线程,线程,多线程,前台/后台线程,UI线程甚至线程池的概念、关系及区别。或者在开发过程中碰到的那些场景可以使用线程,多线程,那些可以不使用。



大家发表自己的意见,分享自己的感想。经验特别丰富的大佬们可以指点一二,这样可以在开发过程中更好,更有效率的利用线程,少走逻辑弯路,使得程序更加健壮,稳定,响应速度更快。

ps:纯粹的讨论。
...全文
7017 71 打赏 收藏 转发到动态 举报
写回复
用AI写文章
71 条回复
切换为时间正序
请发表友善的回复…
发表回复
Angelia77 2020-04-16
  • 打赏
  • 举报
回复
skil35 2020-03-12
  • 打赏
  • 举报
回复
学习了,感谢楼主
skil35 2020-03-11
  • 打赏
  • 举报
回复
跟帖,学习学习
RandomWolf 2018-09-29
  • 打赏
  • 举报
回复
mark一下
yueming72 2018-08-11
  • 打赏
  • 举报
回复
mark一下,过一阵子会需要用到
gxtyzhw 2018-07-12
  • 打赏
  • 举报
回复
讲得好,理解到位
丿江城子丶 2018-07-05
  • 打赏
  • 举报
回复
请教关于C#的完成端口的问题:1.问题的现象:某个时间段 所有客户端都连接不上服务端,过个30个小时左右 可能就连接上了2. 问题现象:服务端刚启动后,大概6、8个小时候,软件客户端连接就连接不上。方便的话留个邮箱?
实力不会debug 2017-12-19
  • 打赏
  • 举报
回复
引用 12 楼 ly04405 的回复:
UI线程:也就是主线程。软件启动时会启动一个线程,这个线程就是主线程,而软件的UI界面也是在这个线程内创建的,也可以称之为UI线程。 多线程:多线程是一个编程概念,使用多线程技术可以大幅提升软件的运行效率,如果把所有的任务都放在主线程上执行,那么对于用户来说是很糟糕的体验。特别是在主线程上执行耗时操作时,会造成UI界面假死,如果这时我们新开一个线程来执行这个耗时操作,就可以解决这个问题。
楼上说的道理是有了,可是我还遇到一个跨线程调用问题
577233 2017-12-09
  • 打赏
  • 举报
回复
引用 50 楼 Jef_Zhang 的回复:
[quote=引用 49 楼 u011672494 的回复:] 我想知道比如开的子线程中 有通过一个全局变量名为flag来控制线程运行的bool变量。当主线程中去操作flag 置位或清位时,如何一处理后。子线程就会立马反应过来。还是说这个子线程中得到改变值的时间我们是没法控制的。两个线程之间的运行顺序逻辑到底怎么样?求解
如果你的需求是线程同步,则可以使用ManualResetEvent和autoresetevent等等;也可以在子线程中轮询。[/quote] 同上
KJ_Wang 2017-12-09
  • 打赏
  • 举报
回复
读本老书《Windows核心编程》上面全有!
xingyuxiu1988 2017-11-24
  • 打赏
  • 举报
回复
http://blog.csdn.net/xingyuxiu1988/article/details/78618913这里有详细讲解同步异步多线程
  • 打赏
  • 举报
回复
“线程复杂性”其实很多都是人为的,是冗余甚至可以说是迂腐的10几年前的java 书上的错误例子造成的。编程设计并不是纠结底层,而是要先从较高层次把面向业务的设计模式写出来,减少底层代码而并不是纠结底层代码。如果你问“子线程是干嘛的?没任务需要处理的时候为什么不结束?”,这样就能按照需求来设计程序,而不是为了技术而技术地堆无用的名词儿。
  • 打赏
  • 举报
回复
引用 51 楼 u011672494 的回复:
[quote=引用 50 楼 Jef_Zhang 的回复:] [quote=引用 49 楼 u011672494 的回复:] 我想知道比如开的子线程中 有通过一个全局变量名为flag来控制线程运行的bool变量。当主线程中去操作flag 置位或清位时,如何一处理后。子线程就会立马反应过来。还是说这个子线程中得到改变值的时间我们是没法控制的。两个线程之间的运行顺序逻辑到底怎么样?求解
如果你的需求是线程同步,则可以使用ManualResetEvent和autoresetevent等等;也可以在子线程中轮询。[/quote] 子线程是while(flag){.....}的形式[/quote] “死循环+阻塞、Sleep”总是凑成一堆的冗余的东西。删除一个,其它的也就被删除了。 真正异步多线程程序设计非常精简、干净。并不需要这一大堆多余的东西。
  • 打赏
  • 举报
回复
引用 49 楼 u011672494 的回复:
我想知道比如开的子线程中 有通过一个全局变量名为flag来控制线程运行的bool变量。当主线程中去操作flag 置位或清位时,如何一处理后。子线程就会立马反应过来。还是说这个子线程中得到改变值的时间我们是没法控制的。两个线程之间的运行顺序逻辑到底怎么样?求解
这个所谓的“子线程”根本就是多余的东西,一个属性的改变自然就会抛出类似 INotifyPropertyChanged、CollectionChanged 或者其它无数种自定义业务事件。抛出事件的宿主可以用系统线程池来分配一个线程来发起,接受事件调用的过程也可以用系统线程池来异步处理。 一个线程中执行的过程通常几十毫秒、几百毫秒就完毕了,还纠结什么“死循环、阻塞”之类的“立马反应过来”的逻辑呢?
Maxhic 2017-11-22
  • 打赏
  • 举报
回复
嘿嘿,马克一下,学习学习
秋的红果实 2017-11-22
  • 打赏
  • 举报
回复
引用 49 楼 u011672494 的回复:
我想知道比如开的子线程中 有通过一个全局变量名为flag来控制线程运行的bool变量。当主线程中去操作flag 置位或清位时,如何一处理后。子线程就会立马反应过来。还是说这个子线程中得到改变值的时间我们是没法控制的。两个线程之间的运行顺序逻辑到底怎么样?求解
子线程的运行顺序我们无法控制,先开始的线程不一定先运行;反之亦然。windows是以优先权方式调度进程的,先启动的线程,可能优先级低,要在后来才能获得CPU的处理权限;启动一个线程,也不一定马上就执行,可能当前CPU正被一个优先级高的进程所占。多线程要慎重
qq_36481889 2017-11-21
  • 打赏
  • 举报
回复
个人自学不是很好特此过来学习学习
thiefx 2017-11-21
  • 打赏
  • 举报
回复
http://www.geekride.com/fork-forking-vs-threading-thread-linux-kernel/ CTRL+C CTRL+V 光速逃:)
ourhouzi 2017-11-21
  • 打赏
  • 举报
回复
引用 49 楼 u011672494 的回复:
我想知道比如开的子线程中 有通过一个全局变量名为flag来控制线程运行的bool变量。当主线程中去操作flag 置位或清位时,如何一处理后。子线程就会立马反应过来。还是说这个子线程中得到改变值的时间我们是没法控制的。两个线程之间的运行顺序逻辑到底怎么样?求解
子线程要反应也要运行到有FLAG变量的代码,你说的立马是一个很模糊的概念,就算是事件驱动也不能说是立马。我可以在点击一个按钮到按钮触发之间干很多事情(当然是其他线程在做),多线程的代码中会出现很多无法想象的问题,这些问题在单线程中根本碰不到。
正怒月神 2017-11-20
  • 打赏
  • 举报
回复
引用 49 楼 u011672494 的回复:
我想知道比如开的子线程中 有通过一个全局变量名为flag来控制线程运行的bool变量。当主线程中去操作flag 置位或清位时,如何一处理后。子线程就会立马反应过来。还是说这个子线程中得到改变值的时间我们是没法控制的。两个线程之间的运行顺序逻辑到底怎么样?求解
这个意思吗?
static bool result = true;
        static void Main(string[] args)
        {
            var q = Task.Factory.StartNew(() => {
                while (result)
                {
                    Console.WriteLine("true");
                    Task.Delay(2000);
                    continue;
                }
                Console.WriteLine(false);

            });
            Thread.Sleep(3000);
            result = false;

            Console.ReadLine();
        }
加载更多回复(51)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧