diff --git a/Docs/Jupter笔记.001.入门说明.ipynb b/Docs/Jupter笔记.001.入门说明.ipynb new file mode 100644 index 0000000..7e3ee5e --- /dev/null +++ b/Docs/Jupter笔记.001.入门说明.ipynb @@ -0,0 +1,879 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + } + }, + "source": [ + "多线程学习笔记,Jupyter NoteBook\n", + "==============================\n", + "\n", + "使用 Jupyter NoteBook 形式,优点是代码执行和 Markdown 文档放在同一个文件中,并可以交替显示和分段执行代码。" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + } + }, + "source": [ + "## 显式声明使用 C# 语言\n", + "+ csharp\n", + "+ fsharp\n", + "+ pwsh" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [], + "source": [ + "#!csharp" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + } + }, + "source": [ + "## C# 中的引用\n", + "+ 导入程序文件\n", + " > 可以导入多种文件,包括 .cs .csc .fc .js等,语法为` #!import /path/to/file ` \n", + "+ 引用本机 Dll 文件\n", + " > 可以导入本机编译好的dll文件,语法为 `#!import /path/to/file`\n", + "+ 引用 Nuget 包\n", + "+ > 默认包源下,可以导入nuget,当然也可以设置包源,语法为 `#r 包名,可选版本号`" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + } + }, + "source": [ + "## C# 中的引用\n", + "+ 导入程序文件\n", + " > 可以导入多种文件,包括 .cs .csc .fc .js等,语法为` #!import /path/to/file ` " + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
MultiThreadingStudy.Core.Person
Id
1
Name小张
Address上海无名路1号
Age
28
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
MultiThreadingStudy.Core.Person
Id
1
Name小张
Address上海无名路1号
Age
28
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#! import \"..\\MultiThreadingStudy.Core\\Person.cs\"\n", + "\n", + "Person p = new Person()\n", + "{\n", + " Id=1,\n", + " Name=\"小张\",\n", + " Address=\"上海无名路1号\",\n", + " Age = 28\n", + "};\n", + "//在NoteBook中,可以格式化显示(Notebook提供) C#对象:使用 display(对象); 如果在代码结尾的话,可以直接写 C#对象。\n", + "display(p);\n", + "\n", + "//代码结尾的话,直接写 对象\n", + "p" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
{ Name = xx, Agx = 33 }
Namexx
Agx
33
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "var x = new {Name=\"xx\",Agx=33};\n", + "display(x);" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + } + }, + "source": [ + "+ 引用本机 Dll 文件\n", + " > 可以导入本机编译好的dll文件,语法为 `#!import /path/to/file`" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
MultiThreadingStudy.Core.Person
Id
2
Name本山
Address
<null>
Age
55
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#r \"..\\MultiThreadingStudy.Core\\bin\\Debug\\netstandard2.1\\MultiThreadingStudy.Core.dll\"\n", + "\n", + "using MultiThreadingStudy.Core;\n", + "\n", + "MultiThreadingStudy.Core.Person personA= new MultiThreadingStudy.Core.Person()\n", + "{\n", + " Id=2,\n", + " Name=\"本山\",\n", + " Age=55\n", + "};\n", + "\n", + "personA" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + } + }, + "source": [ + "+ 引用 Nuget 包" + ] + }, + { + "cell_type": "code", + "execution_count": 136, + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
Installed Packages
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "{\"Id\":2,\"Name\":\"newtonsoft类库\",\"Age\":6}" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "//安装库的最新版本\n", + "#r \"nuget:newtonsoft.json\"\n", + "var jsonObj = new {Id=2,Name=\"newtonsoft类库\", Age=6};\n", + "\n", + "//使用库\n", + "var jsonText = Newtonsoft.Json.JsonConvert.SerializeObject(jsonObj);\n", + "jsonText" + ] + }, + { + "cell_type": "code", + "execution_count": 137, + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
Installed Packages
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "{\"Id\":2,\"Name\":\"System.Text.Json\\u7C7B\\u5E93\",\"Age\":6}" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "//安装库的指定版本\n", + "#r \"nuget:System.Text.Json,4.7.2\"\n", + "\n", + "//使用库\n", + "var jsonObj2 = new {Id=2,Name=\"System.Text.Json类库\", Age=6};\n", + "var jsonText2 = System.Text.Json.JsonSerializer.Serialize(jsonObj2);\n", + "jsonText2" + ] + }, + { + "cell_type": "code", + "execution_count": 163, + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
Restore sources
Installed Packages
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "//安装最新的预览版库\n", + "#r \"nuget:xunit,*-*\"\n", + "\n", + "using Xunit;\n", + "using Xunit.Abstractions;\n", + "using Xunit.Sdk;\n", + "\n", + "public class UnitTest1\n", + "{\n", + " [Fact]\n", + " public void Test1()\n", + " {\n", + " Assert.True(true, \"xxxx\");\n", + " }\n", + "}" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + } + }, + "source": [ + "## Nuget 包源管理\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + } + }, + "source": [ + "+ 默认 Nuget 包源\n", + " > 默认包源可能是:https://api.nuget.org/v3/index.json 使用默认包源的话,可以不添加包源引用。当然也可以添加。" + ] + }, + { + "cell_type": "code", + "execution_count": 165, + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
Restore sources
Installed Packages
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#r \"nuget:AutoFixture.Xunit2\"" + ] + }, + { + "cell_type": "code", + "execution_count": 167, + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
Restore sources
Installed Packages
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "//也可以指定默认包源\n", + "#i \"nuget:https://api.nuget.org/v3/index.json\"\n", + "\n", + "#r \"nuget:AutoFixture.Xunit2\"" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + } + }, + "source": [ + "+ 本机包源 Nuget" + ] + }, + { + "cell_type": "code", + "execution_count": 158, + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
Restore sources
Installed Packages
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "//添加本地包源\n", + "#i \"nuget:C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\\"\n", + "\n", + "//使用包源\n", + "#r \"nuget:xunit\"\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + } + }, + "source": [ + "+ 经过身份验证的Nuget包源\n", + " > 不能直接引用验证包源,可以通过将源的 PAT 放入用户级 nuget.config 文件来访问经过身份验证的源" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + } + }, + "source": [ + "## 内建魔术命令" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + } + }, + "source": [ + "+ #!about 显示有关内核版本的信息" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "

.NET Interactive

© 2020 Microsoft Corporation

Version: 1.0.415202+b72e199d0d854bd532a8103ce626a5aab4a71c07

Library version: 1.0.0-beta.23152.2+b72e199d0d854bd532a8103ce626a5aab4a71c07

Build date: 2023-03-08T16:15:05.1062967Z

https://github.com/dotnet/interactive

" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#!about" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + } + }, + "source": [ + "+ #!lsmagic 列出可用的魔术命令,包括可能已通过扩展安装的命令" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [], + "source": [ + "#!lsmagic" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + } + }, + "source": [ + "+ #!time 显示执行时间" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Wall time: 0.3225ms" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#!time" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + } + }, + "source": [ + "+ -h 参数 显示命令的帮助信息" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Description:\r\n", + " Time the execution of the following code in the submission.\r\n", + "\r\n", + "Usage:\r\n", + " #!time [options]\r\n", + "\r\n", + "Options:\r\n", + " -?, -h, --help Show help and usage information\r\n", + "\r\n", + "\r\n" + ] + } + ], + "source": [ + "#!time -h" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".NET (C#)", + "language": "C#", + "name": ".net-csharp" + }, + "polyglot_notebook": { + "kernelInfo": { + "defaultKernelName": "csharp", + "items": [ + { + "aliases": [ + "c#", + "C#" + ], + "languageName": "C#", + "name": "csharp" + }, + { + "aliases": [ + "frontend" + ], + "languageName": null, + "name": "vscode" + } + ] + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Docs/Jupter笔记.002.线程.ipynb b/Docs/Jupter笔记.002.线程.ipynb new file mode 100644 index 0000000..08cea9a --- /dev/null +++ b/Docs/Jupter笔记.002.线程.ipynb @@ -0,0 +1,225 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + } + }, + "source": [ + "Thread 使用\n", + "==============================\n", + "学习 Thread,执行各种 Thread 操作。\n", + "特别注意:NoteBook 本身的运行线程是后台线程,不会等待由其创建的线程执行结束。与控制台等应用有区别。 " + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + } + }, + "source": [ + "> 全局设置,语言设置、Nuget包引用、空间引用等" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [], + "source": [ + "//全局设置\n", + "#!csharp\n", + "using System.Threading;\n", + "using System.Threading.Channels;\n", + "using System.Threading.Tasks;" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + } + }, + "source": [ + "> 创建托管线程,注意:NoteBook 本身的运行线程是后台线程,不会等待由其创建的线程执行结束,这点与控制台等应用有区别。 " + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "NoteBook线程,线程ID:6 \n", + "NoteBook线程,线程名:.NET ThreadPool Worker \n", + "NoteBook线程,线程池线程:是的 \n", + "NoteBook线程,后台线:是的 \n" + ] + } + ], + "source": [ + "//显示 NoteBook 执行线程信息\n", + "var desc = \"NoteBook线程,\";\n", + "Console.WriteLine($\"{desc}线程ID:{Thread.CurrentThread.ManagedThreadId} \");\n", + "Console.WriteLine($\"{desc}线程名:{Thread.CurrentThread.Name} \");\n", + "Console.WriteLine($\"{desc}线程池线程:{(Thread.CurrentThread.IsThreadPoolThread ? \"是的\" : \"否\")} \");\n", + "Console.WriteLine($\"{desc}后台线:{(Thread.CurrentThread.IsBackground ? \"是的\" : \"不是\")} \");" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "线程:新线程,已经执行!\n", + "线程:NoteBook线程,, 执行结束!\n" + ] + } + ], + "source": [ + "ThreadStart start = ()=>\n", + "{\n", + " Console.WriteLine($\"线程:{Thread.CurrentThread.Name},已经执行!\");\n", + "};\n", + "\n", + "var t = new Thread(start)\n", + "{\n", + " Name=\"新线程\"\n", + "};\n", + "t.Start();\n", + "//如果不join,新创建的线程,可能还没来得及执行,就随着Notebook线程的结束而结束了。\n", + "t.Join();\n", + "\n", + "Console.WriteLine($\"线程:{desc}, 执行结束!\");\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".NET (C#)", + "language": "C#", + "name": ".net-csharp" + }, + "polyglot_notebook": { + "kernelInfo": { + "defaultKernelName": "csharp", + "items": [ + { + "aliases": [ + "c#", + "C#" + ], + "languageName": "C#", + "name": "csharp" + }, + { + "aliases": [ + "frontend" + ], + "languageName": null, + "name": "vscode" + }, + { + "aliases": [ + "powershell" + ], + "languageName": "PowerShell", + "name": "pwsh" + }, + { + "aliases": [], + "name": ".NET" + }, + { + "aliases": [ + "f#", + "F#" + ], + "languageName": "F#", + "name": "fsharp" + }, + { + "aliases": [], + "languageName": "HTML", + "name": "html" + }, + { + "aliases": [], + "languageName": "KQL", + "name": "kql" + }, + { + "aliases": [], + "languageName": "Mermaid", + "name": "mermaid" + }, + { + "aliases": [], + "languageName": "SQL", + "name": "sql" + }, + { + "aliases": [], + "name": "value" + } + ] + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Docs/学习.md b/Docs/学习.md index c65b403..f53fa77 100644 --- a/Docs/学习.md +++ b/Docs/学习.md @@ -1,33 +1,37 @@ -߳ѧϰ +多线程学习 ========== -## 벢 -## ߳ +## 并发与并行 -## ԭ߳ +## 进程与线程 -## й߳ +## 原生线程 -### +## 托管线程 -### ռģʽģʽ +### 简介 -### ̱߳ش洢 +### 抢占模式与合作模式 -### ԭӲ㷨 +### 线程本地存储 -### -+ -+ -+ lock -+ д +### 原子操作与无锁算法 -### ź +### 锁 ++ 自旋锁 ++ 互斥锁 ++ 混合锁与lock语句 ++ 读写锁 -### 첽 +### 信号量 -### ִ +### 异步操作 -### ͬ +### 执行上下文 -### +### 同步上下文 + +## 多线程编程模型 + +### 基于事件的模型 +### 基于任务的模型