C# 多线程学习笔记 - 1
本文主要针对 GKarch 相关文章留作笔记,仅在原文基础上记录了自己的理解与摘抄部分片段。
遵循原作者的 CC 3.0 协议。
如果想要了解更加详细的文章信息内容,请访问下列地址进行学习。
基础知识
- 静态字段是在所有线程当中共享状态的。
- 一个线程被阻塞时,不会消耗 CPU 资源。
- Join 可以等待另一个线程结束,Sleep 可以将线程阻塞指定的时间,两者使用时线程都是阻塞状态。
- Join 可以设置超时时间,当线程执行超过指定时间返回 False。
Thread.Sleep(0)会释放当前时间片,将 CPU 资源让出给其他线程。Thread.Sleep(0)作用与Thread.Yield()作用一样,后者只会让出给当前核心的其他线程。Thread.Yield()执行时会影响到程序的话,基本可以确定代码存在 Bug。- 在使用 Lambda 表达式启动线程并传入变量的时候,不要在启动线程之后更改被捕获变量的值。
- 线程分为前台线程与后台线程,当所有前台线程中止时,程序自动退出。
- 可以显式地提高线程优先级,但可能会导致线程饥饿。
线程池
由于线程创建成本高昂(私有局部变量栈,每个线程默认占用 1 MB内存),所以一般都会使用线程池来进行线程的创建与回收。
线程池线程可以临时更改其优先级,在回收后会恢复默认状态。
开发人员可以通过
Thread.CurrentThread.IsThreadPoolThread属性查询线程是否运行在线程池中。通过查询 Task.Result 会导致当前线程阻塞,直到任务执行完成,如果发生错误,则会将异常包装到
AggregateException异常内进行抛出。通过异步委托可以快速创建一个工作线程。
- 创建目标方法委托。
- 在委托上调用
BeginInvoke()方法,保存其IActionResult返回值。 - 需要返回结果时,调用
EndInvoke()方法,传递保存的IActionResult对象。
class Program
{
static void Main(string[] args)
{
Func<string, int> work = Work; var result = work.("测试",null,null); Console.WriteLine("获得结果"); work.EndInvoke(result);
} public static int Work(string inputStr)
{
Console.Write(Thread.CurrentThread);
return inputStr.Length;
}
}
注意:
上述代码在 .NET Core 平台上是无法运行的。
异步委托在调用
BeginInvoke()的时候可以传入回调方法。线程池可以通过
ThreadPool.SetMaxThreads与ThreadPool.SetMinThreads进行优化。
C# 多线程学习笔记 - 1的更多相关文章
- java多线程学习笔记——详细
一.线程类 1.新建状态(New):新创建了一个线程对象. 2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中, ...
- JAVA多线程学习笔记(1)
JAVA多线程学习笔记(1) 由于笔者使用markdown格式书写,后续copy到blog可能存在格式不美观的问题,本文的.mk文件已经上传到个人的github,会进行同步更新.github传送门 一 ...
- 多线程学习笔记九之ThreadLocal
目录 多线程学习笔记九之ThreadLocal 简介 类结构 源码分析 ThreadLocalMap set(T value) get() remove() 为什么ThreadLocalMap的键是W ...
- java进阶-多线程学习笔记
多线程学习笔记 1.什么是线程 操作系统中 打开一个程序就是一个进程 一个进程可以创建多个线程 现在系统中 系统调度的最小单元是线程 2.多线程有什么用? 发挥多核CPU的优势 如果使用多线程 将计算 ...
- Java多线程学习笔记(一)——多线程实现和安全问题
1. 线程.进程.多线程: 进程是正在执行的程序,线程是进程中的代码执行,多线程就是在一个进程中有多个线程同时执行不同的任务,就像QQ,既可以开视频,又可以同时打字聊天. 2.线程的特点: 1.运行任 ...
- java 多线程学习笔记
这篇文章主要是个人的学习笔记,是以例子来驱动的,加深自己对多线程的理解. 一:实现多线程的两种方法 1.继承Thread class MyThread1 extends Thread{ public ...
- Java多线程学习笔记--生产消费者模式
实际开发中,我们经常会接触到生产消费者模型,如:Android的Looper相应handler处理UI操作,Socket通信的响应过程.数据缓冲区在文件读写应用等.强大的模型框架,鉴于本人水平有限目前 ...
- Java多线程学习笔记
进程:正在执行中的程序,其实是应用程序在内存中运行的那片空间.(只负责空间分配) 线程:进程中的一个执行单元,负责进程汇总的程序的运行,一个进程当中至少要有一个线程. 多线程:一个进程中时可以有多个线 ...
- C# 多线程学习笔记 - 3
本文主要针对 GKarch 相关文章留作笔记,仅在原文基础上记录了自己的理解与摘抄部分片段. 遵循原作者的 CC 3.0 协议. 如果想要了解更加详细的文章信息内容,请访问下列地址进行学习. 原文章地 ...
- C# 多线程学习笔记 - 2
本文主要针对 GKarch 相关文章留作笔记,仅在原文基础上记录了自己的理解与摘抄部分片段. 遵循原作者的 CC 3.0 协议. 如果想要了解更加详细的文章信息内容,请访问下列地址进行学习. 原文章地 ...
随机推荐
- Linux中CPU亲和性(affinity)
0.准备知识 超线程技术(Hyper-Threading):就是利用特殊的硬件指令,把两个逻辑内核(CPU core)模拟成两个物理芯片, 让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和 ...
- 杂记:Python 两坑
近日写代码又遇到两个 Python 的坑,觉得值得记录. 递归传参问题 Python 里传参的实现是 assignment,但由于 Python 里都是对象,除了几个基本类型,assignment 基 ...
- 韩天峰《大话PHP设计模式》听课笔记
课程主要内容 1.PHP面向对象的高级特性 2.11种设计模式 3.PSR-0,Composer,Phar等最流行的技术 目标 掌握PHP各类设计模式,并具备设计纯面向对象框架和系统的能力 二.编 ...
- 2018-2019-2 20165220 《网络对抗技术》Exp1 PC平台逆向破解
实验目的 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShe ...
- Linux-硬件
1.服务器 计算节点服务器-用于后台逻辑运算,所以cpu,磁盘读写性能要求较高 web服务器-用于用户请求访问一些页面,如果高并发,磁盘读写性能要好,可以使用raid0或raid1或raid5技术(r ...
- 简单使用WebSocket实现聊天室
环境需求:flask,websocket第三方包 目录结构 web中实现群聊 ws_群聊.py文件 # 实现一个websocket 先下载包 gevent-websocket from flask i ...
- Python爬虫开发与项目实战
Python爬虫开发与项目实战(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1MFexF6S4No_FtC5U2GCKqQ 提取码:gtz1 复制这段内容后打开百度 ...
- Response输出excel设置文本样式
在网上查了些Response导出excel然后设置样式的方法,发现没有一个可行的于是开始自己研究, 发现可以通过输出样式的方式进行配置,我要设置的是全文本格式在excel样式是这样的mso-numbe ...
- flagSet 使用
var ( flagSet = flag.NewFlagSet("main", flag.ExitOnError) // 参数定义 version = flagSet.Bool(& ...
- php一些高级函数方法
PHP高级函数 1.call_user_func (http://php.net/manual/zh/function.call-user-func.php) 2.get_class (http:// ...