.NET常见线程简介(翻译)

.NET Task Thread 进程 Process线程池pool、Invoke、begininvoke、异步回调、APM、EAP、TPL、async、await、SynchronizationCo 当主线程在执行一段代码的时候,我们用委托执行了一个线程,这个线程要返回一个结果,关键是什么时候返回这个结果,异步回调就是在这个线程执行完成后立即返回这个线程的结果,然后继续执行主线程的方法。**异步执行:**在主线程在执行的时候,打开一个子线程,主线程继续执行,当主线程需要子线程运行的结果的时候,主线程直接调用子线程运行结果,如果在调用的时候子线程还没有执行完成,主线程等待,直到子线程执行完成,主线程再继续执行。C#中的线程分为前台线程和后台线程,线程创建时不做设置默认是前台线程。... 阅读详情

当你分析一个dump文件的时候,调试里面最艺术的地方就是知道哪些东西是可以忽略的,而哪些是你想要的东西。

特别是在你分析一个程序停止响应(hang)的bug时,了解这些常见线程对你非常有帮助,浏览线程各堆栈列表的时候,你可以知道不是这个线程出问题了,也不是那个线程…………

因为大部分时间我是跟asp.net打交道,所以我将通过分析w3wp.exe(IIS 6里面用来执行asp.net页面代码的进程)的一个dump文件来介绍这些常见线程。所有这些常见线程都有一个共性,就是它们要么是睡眠状态(sleeping state)或者等待状态(waiting state),等待处理更多的工作。因此虽然它们看起来是造成程序停止响应(hang)的原因,实际上它们并不是真正的罪魁祸首……如果你发现它们处于其他的状态,比如说正在执行某个任务,那么它们就需要得到更多的关注了。

我把这些常见的线程划分为以下几个种类:

  1. CLR线程

  2. W3WP线程

  3. RPC线程

  4. 其他COM线程

CLR线程

线程池(ThreadPool)管理程序有五种主要的线程类型:

  1. Completion Port/IO 线程和工作(Worker)线程是执行你的托管(managed)代码和.net代码的线程。

  2. 一个闸门(gate)线程根据CPU的利用率,GC的频率和工作队列(worker queue)的大小,动态地创建或销毁工作线程和IO线程。

  3. 停滞(wait)线程,用来等待一些同步对象触发的事件,比如说,一个程序员使用WaitHandle类(或它的派生类),这个类内部使用WaitForSingleObject Win32 API函数来是这个线程处于停滞状态。

  4. 最后第五个是定时器(Timer)线程,它是用来调用定时器(Timer)回调函数的线程。

下面的列表列出了.NET 1.1中它们在停滞状态时候的模样(由于我在翻译的时候,机器上没有微软.NET 2.0的公开符号文件,所以只好原文拷贝下来了,有机会我会将2.0里面的堆栈列出来):

闲置状态中的CLR工作线程(Worker Thread):

 11 Id: fb8.268 Suspend: 0 Teb: 7ffaa000 Unfrozen
ChildEBP RetAddr Args to Child              
0199fdf8 7c822124 77e6baa8 00000234 00000000 ntdll!KiFastSystemCallRet
0199fdfc 77e6baa8 00000234 00000000 0199fe40 ntdll!NtWaitForSingleObject+0xc
0199fe6c 77e6ba12 00000234 00009c40 00000000 kernel32!WaitForSingleObjectEx+0xac
0199fe80 791d401f 00000234 00009c40 00000000 kernel32!WaitForSingleObject+0x12
0199fea4 791fdacc 00000000 00000000 80a56bcc mscorsvr!ThreadpoolMgr::WorkerThreadStart+0x3a
0199ffb8 77e66063 000b6da8 00000000 00000000 mscorsvr!ThreadpoolMgr::intermediateThreadProc+0x44
0199ffec 00000000 791fda8b 000b6da8 00000000 kernel32!BaseThreadStart+0x34

闲置状态中的CLR Completion Port/IO Thread:

   9 Id: fb8.ef8 Suspend: 0 Teb: 7ffac000 Unfrozen
ChildEBP RetAddr Args to Child              
0191fec0 7c821bf4 77e6611a 0000023c 0191ff1c ntdll!KiFastSystemCallRet
0191fec4 77e6611a 0000023c 0191ff1c 0191ff08 ntdll!NtRemoveIoCompletion+0xc
0191fef0 791fdb22 0000023c 0191ff18 0191ff1c kernel32!GetQueuedCompletionStatus+0x29
0191ff24 791fdacc 00000001 809a05fe 7ffac000 mscorsvr!ThreadpoolMgr::CompletionPortThreadStart+0x49
0191ffb8 77e66063 000b6da8 00000000 00000000 mscorsvr!ThreadpoolMgr::intermediateThreadProc+0x44
0191ffec 00000000 791fda8b 000b6da8 00000000 kernel32!BaseThreadStart+0x34

闲置状态中的CLR 闸门(gate)线程:

 10 Id: fb8.bdc Suspend: 0 Teb: 7ffab000 Unfrozen
ChildEBP RetAddr Args to Child              
0195fe50 7c821364 77e42439 00000000 0195fe94 ntdll!KiFastSystemCallRet
0195fe54 77e42439 00000000 0195fe94 00000000 ntdll!NtDelayExecution+0xc
0195febc 77e424b7 000001f4 00000000 0195ffb8 kernel32!SleepEx+0x68
0195fecc 791bf4f9 000001f4 0b2646e6 00000939 kernel32!Sleep+0xf
0195ffb8 77e66063 00000000 00000000 00000000 mscorsvr!ThreadpoolMgr::GateThreadStart+0x54
0195ffec 00000000 791bf4a5 00000000 00000000 kernel32!BaseThreadStart+0x34

闲置状态中的CLR停滞(wait)线程:


 25 Id: 230.ac0 Suspend: 0 Teb: 7ff4c000 Unfrozen
ChildEBP RetAddr Args to Child              
1b88ff6c 7c573a4e 00000001 1b88ff84 00000000 NTDLL!ZwDelayExecution+0xb 
1b88ff8c 7923558c ffffffff 00000001 198ba828 KERNEL32!SleepEx+0x32 
1b88ffb4 7c57438b 00000000 198ba828 197f7498 mscorsvr!ThreadpoolMgr::WaitThreadStart+0x45 
1b88ffec 00000000 7923556a 1973b3d0 00000000 KERNEL32!BaseThreadStart+0x52

闲置状态中的CLR定时器(Timer)线程:

 18 Id: fb8.914 Suspend: 0 Teb: 7ff5f000 Unfrozen
ChildEBP RetAddr Args to Child              
0224ff38 7c821364 77e42439 00000001 0224ff7c ntdll!KiFastSystemCallRet
0224ff3c 77e42439 00000001 0224ff7c 000003e8 ntdll!NtDelayExecution+0xc
0224ffa4 791cc578 000003e8 00000001 00000000 kernel32!SleepEx+0x68
0224ffb8 77e66063 00000000 00000000 00000000 mscorsvr!ThreadpoolMgr::TimerThreadStart+0x30
0224ffec 00000000 791cc548 00000000 00000000 kernel32!BaseThreadStart+0x34

除了这些线程,CLR还创建了一些其他的线程:

在一个多核主机上,在一个CLR宿主进程中(服务器版本的GC),每一个处理器都会由一个垃圾回收(GC)线程,而在超线程系统上,每个进程会有两个。这些线程用来处理托管堆上的垃圾回收操作。

另外在每一个进程里我们还有终结器线程(Finalizer Thread),这个线程运行所有的Finalize函数。在调试进程无响应(hang)和高内存使用率的情形时,要特别注意这个线程。如果在收集一个对象(finalizing an object)的时候它被其他的东西阻塞(blocked in any way)的话,那么你的托管变量就不能被以合适的方式清理掉,最终你就得到一个内存泄漏的结果,并且/或者有一个高CPU使用率的情形,因为 GC将不得不重复启动以保证你的内存可用率。

最后,CLR还提供了一个DebuggerThread用来提供托管程序调试服务。

闲置状态中的CLR垃圾回收(GC)线程:

 13 Id: fb8.c10 Suspend: 0 Teb: 7ffa8000 Unfrozen
ChildEBP RetAddr Args to Child              
01d6fefc 7c822124 77e6baa8 000002b4 00000000 ntdll!KiFastSystemCallRet
01d6ff00 77e6baa8 000002b4 00000000 00000000 ntdll!NtWaitForSingleObject+0xc
01d6ff70 77e6ba12 000002b4 ffffffff 00000000 kernel32!WaitForSingleObjectEx+0xac
01d6ff84 791fe6b0 000002b4 ffffffff 00000000 kernel32!WaitForSingleObject+0x12
01d6ffac 792356be 00000000 01d6ffec 77e66063 mscorsvr!gc_heap::gc_thread_function+0x2f
01d6ffb8 77e66063 000d2ed8 00000000 00000000 mscorsvr!gc_heap::gc_thread_stub+0x1e
01d6ffec 00000000 792356a0 000d2ed8 00000000 kernel32!BaseThreadStart+0x34

闲置状态中的CLR终结器(Finalizer)线程:

 17 Id: fb8.7b0 Suspend: 0 Teb: 7ffa4000 Unfrozen
ChildEBP RetAddr Args to Child              
01e6fdf8 7c822114 77e6711b 00000002 01e6fe48 ntdll!KiFastSystemCallRet
01e6fdfc 77e6711b 00000002 01e6fe48 00000001 ntdll!NtWaitForMultipleObjects+0xc
01e6fea4 77e61075 00000002 793eee08 00000000 kernel32!WaitForMultipleObjectsEx+0x11a
01e6fec0 7927826b 00000002 793eee08 00000000 kernel32!WaitForMultipleObjects+0x18
01e6fee0 791fecf4 000002dc 00000000 792376a4 mscorsvr!WaitForFinalizerEvent+0x5a
01e6ff24 79245681 00000000 809a05fe 7ffa4000 mscorsvr!GCHeap::FinalizerThreadStart+0x96
01e6ffb8 77e66063 000d5500 00000000 00000000 mscorsvr!Thread::intermediateThreadProc+0x44
01e6ffec 00000000 79245640 000d5500 00000000 kernel32!BaseThreadStart+0x34

闲置状态中的CLR调试(Debugger)线程:


  12 Id: fb8.b30 Suspend: 0 Teb: 7ffa9000 Unfrozen
ChildEBP RetAddr Args to Child              
01adfe70 7c822114 77e6711b 00000003 01adfec0 ntdll!KiFastSystemCallRet
01adfe74 77e6711b 00000003 01adfec0 00000001 ntdll!NtWaitForMultipleObjects+0xc
01adff1c 77e61075 00000003 01adff5c 00000000 kernel32!WaitForMultipleObjectsEx+0x11a
01adff38 79238fd6 00000003 01adff5c 00000000 kernel32!WaitForMultipleObjects+0x18
01adffa0 79238f4d 00000000 00000000 00000000 mscorsvr!DebuggerRCThread::MainLoop+0x90
01adffb0 7923a714 01adffec 77e66063 019d1eb0 mscorsvr!DebuggerRCThread::ThreadProc+0x68
01adffb8 77e66063 019d1eb0 00000000 00000000 mscorsvr!DebuggerRCThread::ThreadProcStatic+0xb
01adffec 00000000 7923a709 019d1eb0 00000000 kernel32!BaseThreadStart+0x34
 

W3WP线程

W3WP进程里面主要有主线程、线程池线程和压缩线程。

主线程负责启动和关闭进程,线程池线程用来处理页面请求,而压缩线程就如名字如表明的那样是用来处理压缩数据的。

W3WP主(main)线程:


. 0 Id: fb8.fd8 Suspend: 0 Teb: 7ffdf000 Unfrozen
ChildEBP RetAddr Args to Child              
0006fc08 7c822124 77e6baa8 00000184 00000000 ntdll!KiFastSystemCallRet
0006fc0c 77e6baa8 00000184 00000000 00000000 ntdll!NtWaitForSingleObject+0xc
0006fc7c 77e6ba12 00000184 ffffffff 00000000 kernel32!WaitForSingleObjectEx+0xac
0006fc90 5a36467a 00000184 ffffffff 00000000 kernel32!WaitForSingleObject+0x12
0006fca0 5a366e63 00254ff8 5a3af41d 00000000 w3dt!WP_CONTEXT::RunMainThreadLoop+0x10
0006fca8 5a3af41d 00000000 64711da9 00000000 w3dt!UlAtqStartListen+0x2d
0006fcb8 5a3bc259 0100141c 010013e4 010012d0 w3core!W3_SERVER::StartListen+0xbd
0006ff0c 0100187c 00000007 002538e0 00000000 w3core!UlW3Start+0x26e
0006ff44 01001a23 00000007 002538e0 002543d0 w3wp!wmain+0x22a
0006ffc0 77e523cd 00000000 00000000 7ffd7000 w3wp!wmainCRTStartup+0x12b
0006fff0 00000000 010018f8 00000000 78746341 kernel32!BaseProcessStart+0x23

闲置状态中的w3wp线程池(ThreadP在这里插入代码片ool)线程:

   2 Id: fb8.c5c Suspend: 0 Teb: 7ffd9000 Unfrozen
ChildEBP RetAddr Args to Child              
00c8ff24 7c821bf4 77e6611a 00000170 00c8ff80 ntdll!KiFastSystemCallRet
00c8ff28 77e6611a 00000170 00c8ff80 00c8ff6c ntdll!NtRemoveIoCompletion+0xc
00c8ff54 5a30249e 00000170 00c8ff7c 00c8ff80 kernel32!GetQueuedCompletionStatus+0x29
00c8ff8c 5a3026bc 00000000 00258580 5a300000 w3tp!THREAD_POOL_DATA::ThreadPoolThread+0x33
00c8ffa0 5a301db9 00000102 00000000 00000000 w3tp!THREAD_POOL_DATA::ThreadPoolThread+0x24
00c8ffb8 77e66063 00258580 00000000 00000000 w3tp!THREAD_MANAGER::ThreadManagerThread+0x39
00c8ffec 00000000 5a301d80 00258580 00000000 kernel32!BaseThreadStart+0x34

闲置状态中的w3wp压缩(Compression)线程:


   7 Id: fb8.b20 Suspend: 0 Teb: 7ffaf000 Unfrozen
ChildEBP RetAddr Args to Child              
017dfa84 7c822124 77e6baa8 000001d0 00000000 ntdll!KiFastSystemCallRet
017dfa88 77e6baa8 000001d0 00000000 00000000 ntdll!NtWaitForSingleObject+0xc
017dfaf8 77e6ba12 000001d0 ffffffff 00000000 kernel32!WaitForSingleObjectEx+0xac
017dfb0c 5a3b8147 000001d0 ffffffff 00000000 kernel32!WaitForSingleObject+0x12
017dffb8 77e66063 00000000 00000000 00000000 w3core!HTTP_COMPRESSION::CompressionThread+0x126
017dffec 00000000 5a3b8021 00000000 00000000 kernel32!BaseThreadStart+0x34
 

RPC线程

当有闲置的LRPC工作线程(worker thread)存在的时候,意味着我们可以处理更多的本地或者远程COM对象激活和本地COM函数调用。

有闲置RPC工作线程(worker thread)存在意味着我们可以处理更多的远程COM函数调用。

参看这篇文档来了解RPC线程模型:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/rpc/rpc/scalability.asp

闲置状态中的RPC工作(worker)线程:

 29 Id: fb8.7fc Suspend: 0 Teb: 7ffa1000 Unfrozen
ChildEBP RetAddr Args to Child              
02ddfeac 7c821bf4 77e6611a 00000078 02ddff04 ntdll!KiFastSystemCallRet
02ddfeb0 77e6611a 00000078 02ddff04 02ddfef4 ntdll!NtRemoveIoCompletion+0xc
02ddfedc 77c604c3 00000078 02ddff14 02ddff04 kernel32!GetQueuedCompletionStatus+0x29
02ddff18 77c60655 ffffffff 02ddff6c 02ddff70 rpcrt4!COMMON_ProcessCalls+0xa1
02ddff84 77c5f9f1 02ddffac 77c5f7dd 00090250 rpcrt4!LOADABLE_TRANSPORT::ProcessIOEvents+0x117
02ddff8c 77c5f7dd 00090250 00000000 00000000 rpcrt4!ProcessIOEventsWrapper+0xd
02ddffac 77c5de88 0008e610 02ddffec 77e66063 rpcrt4!BaseCachedThreadRoutine+0x9d
02ddffb8 77e66063 029515e8 00000000 00000000 rpcrt4!ThreadStartRoutine+0x1b
02ddffec 00000000 77c5de6d 029515e8 00000000 kernel32!BaseThreadStart+0x34
 

闲置状态中的LRPC工作(worker)线程:


 33 Id: fb8.b24 Suspend: 0 Teb: 7ffdb000 Unfrozen
ChildEBP RetAddr Args to Child              
02e1fe18 7c821c54 77c7538c 00000138 02e1ff74 ntdll!KiFastSystemCallRet
02e1fe1c 77c7538c 00000138 02e1ff74 00000000 ntdll!ZwReplyWaitReceivePortEx+0xc
02e1ff84 77c5778f 02e1ffac 77c5f7dd 0009d660 rpcrt4!LRPC_ADDRESS::ReceiveLotsaCalls+0x198
02e1ff8c 77c5f7dd 0009d660 00000000 00000000 rpcrt4!RecvLotsaCallsWrapper+0xd
02e1ffac 77c5de88 0008e610 02e1ffec 77e66063 rpcrt4!BaseCachedThreadRoutine+0x9d
02e1ffb8 77e66063 05057c08 00000000 00000000 rpcrt4!ThreadStartRoutine+0x1b
02e1ffec 00000000 77c5de6d 05057c08 00000000 kernel32!BaseThreadStart+0x34
 

其他COM线程

单线程组件必须被Host(Main)STA线程处理—这个线程是第一个被创建的COM STA线程。

有闲置的STA线程存在的时候意味着我们可以处理更多的STA激活和函数调用。

参考来获取更多的信息:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncomser/html/comthread.asp。

Host STA线程:


31 Id: fb8.b3c Suspend: 0 Teb: 7ff4e000 Unfrozen
ChildEBP RetAddr Args to Child              
049cff14 7739c78d 7739c7c0 049cff58 00000000 ntdll!KiFastSystemCallRet
049cff34 77694ff1 049cff58 00000000 00000000 user32!NtUserGetMessage+0xc
049cff74 776cf35b 00007530 77e6ba20 02a40fe0 ole32!CDllHost::STAWorkerLoop+0x72
049cff90 776cf2a3 049cffb8 776b2307 77790438 ole32!CDllHost::WorkerThread+0xc8
049cff98 776b2307 77790438 00000000 02a40fe0 ole32!DLLHostThreadEntry+0xd
049cffac 776b2374 00000000 049cffec 77e66063 ole32!CRpcThread::WorkerLoop+0x1e
049cffb8 77e66063 02a40fe0 00000000 00000000 ole32!CRpcThreadCache::RpcWorkerThreadEntry+0x20
049cffec 00000000 776b2354 02a40fe0 00000000 kernel32!BaseThreadStart+0x34
 

闲置的 STA线程:

14 Id: e5c.d90 Suspend: 1 Teb: 7ffac000 Unfrozen
ChildEBP RetAddr Args to Child              
0140fdcc 77f4372d 77e41bfa 00000003 0140fe1c SharedUserData!SystemCallStub+0x4
0140fdd0 77e41bfa 00000003 0140fe1c 00000001 ntdll!NtWaitForMultipleObjects+0xc
0140fe78 77d076f5 00000003 0140fea0 00000000 kernel32!WaitForMultipleObjectsEx+0x11a
0140fed4 77d077f5 00000002 0140ff74 ffffffff USER32!RealMsgWaitForMultipleObjectsEx+0x13f
0140fef0 7563439d 00000002 0140ff74 00000000 USER32!MsgWaitForMultipleObjects+0x1d
0140ff84 77bc91ed 000b6eb8 00000000 00000000 COMSVCS!CSTAThread::WorkerLoop+0x1e3
0140ffb8 77e4a990 00268a58 00000000 00000000 msvcrt!_threadstartex+0x6f
0140ffec 00000000 77bc917e 00268a58 00000000 kernel32!BaseThreadStart+0x34

备注:这不是一个完整的线程列表,但是上面这些可以在你分析导致你的进程没有响应的嫌疑犯的时候提供一些有用的信息。

【转】外部.NET程序与AutoCAD交互[… <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <div id="content" class= "content mod-cs-content text-content clearfi 阅读详情

相关推荐

精通.NET多线程编程:源码与实战指南

本文还有配套的精品资源,点击获取 简介:本主题深入探讨.NET框架中的多线程编程技术,指导开发者如何使用C#或***创建和管理线程,以及提升程序执行效率。内容涵盖线程创建、启动与停止、同步与互斥、异步编程、线程池、线程优先级、死锁与竞态条件的处理,以及线程局部存储和并发集合的使用。通过学习这些关键技能,开发者能够构建高性能、健壮的.NET应用程序。 1. .NET...

weixin_35879493的博客 1304

.NET 线程概述

概论 多线程在构建大型系统的时候是需要重点关注的一个重要方面,特别是在效率(系统跑得多快?)和性能(系统工作正常?)之间做一个权衡的时候。恰当的使用多线程可以极大的提高系统性能。什么是线程? 每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可

binyao02123202的专栏 1852

一文搞懂 RC Correlation Scale Factor 的生成与应用

pre-route 用的是统计估算模型,post-route 用的是详细布线提取,signoff 用的是第三方 QRC 或 StarRC——三个工具,三套参数体系,结果自然天差地别。不同 RC corner(rc_worst/rc_best/rc_typical)对应不同的工艺角和温度环境,每个 corner 的 R/C 偏差比例不同,必须分别生成和应用各自的 scale factor。别被名字骗了,这个工具专门干一件事——统计拟合两组 SPEF 之间的偏差,自动推荐最优 scaling factor。

weixin_47770727的博客 547

C#--线程池与线程的种类

.NET CLR线程的种类 至少3个线程:主线程、调试线程、终结器线程 1.main thread 2.worker thread 3.finalizer thread 4.debugger helper thread 5.concurrent gc thread 6.server gc threads 7.app domain unload helper thread 8.thread...

weixin_30484247的博客 248

SBP依赖计算中的蝴蝶效应:一个Prefab修改如何触发全量重建?

本文深入探讨了Unity中SBP(Scriptable Build Pipeline)依赖计算的蝴蝶效应,解析了Prefab修改如何触发全量重建的机制。通过分析Asset与Object的层级关系、依赖计算的三种维度及CacheEntry系统,揭示了全量重建的根本原因,并提供了依赖可视化工具开发、优化策略与最佳实践,帮助开发者提升构建效率。

weixin_29015051的博客 444

揭秘 | 顶刊论文插图中的高级配色方案(附RGB/HEX码解析)

本文揭秘了顶级期刊如《Nature》《Science》插图的高级配色方案,详细解析了RGB/HEX码的应用技巧。从双色配色的黄金组合到复杂数据可视化的多色解决方案,提供了实用的配色法则和跨平台一致性建议,帮助科研人员提升图表专业度和视觉传达效果。

weixin_28523493的博客 985

【.NET Core】 多线程之(Thread)详解

线程被定义为程序的执行路径。每个线程都定义了一个独特的控制流。如果您的应用程序涉及复杂且耗时的操作,那么设置不同的线程执行路径往往事半功倍,让每个线程执行特定的工作任务。线程是一个轻量级进程。一个使用线程的常见实例是操作系统中并行编程的实现。使用线程节省了CPU周期的浪费,同时提高了应用程序的效率。本文将讲详细讲解Thread线程的用法。Thread类位于命名空间下,命名空间提供一些可以进行多线程编程的类和接口。除同步线程活动和访问数据的类(MutexMonitor和等)外,该命名空间还包含一个。

记录总结工作过往 2739

ANSYS/ANSYS Workbench生成mnf文件导入到Adams相关问题浅显解释

ANSYS/ANSYS Workbench生成mnf文件导入到Adams相关问题浅显解释。

weixin_45551870的博客 6979

.NET常见线程简介

.NET常见线程简介(翻译)

weixin_34348111的博客 78

一、数学建模层次分析法(AHP)【清风数学建模个人笔记】

层次分析法: 层次分析法主要用于解决评价类问题(例如:选择哪种方案更好、哪位员工、运动员等表现得更优秀) 评价类问题: 分析问题得出评判问题的子标,分别给不同子标赋予权重(权重和要为1) ...

m0_58882109的博客 1万+

ATE FT ChangeKit学习总结-20250630

半导体封装测试中的ChangeKit是Handler测试机的关键配套治具,主要用于适配不同芯片封装尺寸的FT测试。其主要特点包括:1)适应性,可快速切换不同测试设置;2)精准性,确保器件测试安全;3)高效性,减少停机时间。主要组件含Shuttle传送机构、HotPlate预热盘、DockPlate连接件和Contactor压头。设计需考虑Handler型号、芯片规格及PCB匹配(如140mm标准孔位),特别在低温测试时需注意吹气块布局。ChangeKit实现了测试设备的灵活配置,提升了半导体测试效率。

歌颂苦难的行为是无耻的; 1745

【翻译】深入浅出.NET线程系列之一:.NET线程介绍

原文标题:Beginners Guide To Threading In .NET Part 1 of N --Introduction into threading in .NET 原文作者:Sacha Barber 原文链接:http://www.codeproject.com/KB/threads/ThreadingDotNet.aspx License: The...

weixin_30414635的博客 253

QML从入门到实战 - 完整学习路线

想入门 QML 开发?来 “从零开始学 QML” 专栏,海量源码 + 实战案例 + 大型项目拆解,手把手教你搞定跨平台 UI 设计,小白也能轻松掌握!

BenBierBa的博客 3473

R.net简介(原创翻译)

当你看到这篇文章的时候,你应该亲我一下。因为它花费了我一个可以泡妞的下午来翻译。R.net地址:http://rdotnet.codeplex.com/R.NETR.NET使.NET框架在同一进程与R统计语言进行互操作。 R.NET需要.NET Framework 4。并且在本地有R环境中安装的本地DLL。 R.NET适用于Windows,Linux和MacOS。您可以选择适合您的特殊语言来使

guoer9973的专栏 3583

hive get_json_object解析json结果为null咋办?

最近一位开发的同学在使用get_json_object函数对json数据解析的时候,出现了结果为null的问题,问题原因是sql语法导致的,那么今天就来详细介绍一下解析json函数的用法!最后还是提醒小伙伴们,在开发过程中,一定要注意sql语法格式的书写,避免一些意想不到的结果!

笑看风云路的博客 2308

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【亲测免费】 DynamicTranslator:Windows 上的即时翻译神器

DynamicTranslator:Windows 上的即时翻译神器 项目介绍 DynamicTranslator 是一款专为 Windows 用户设计的即时翻译应用程序,基于 .NET 技术开发。它能够动态捕捉用户在任何窗口中选中的文本(如 PDF、浏览器、Word 等),并即时进行翻译。该应用支持多语言翻译,集成了多个知名翻译引擎,包括 Google Translate 和 Tureng,确保...

gitblog_00843的博客 1000

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【翻译】.NET 中多线程间资源共享与访问(转)

  翻译 vinodramakrishnan著Managing shared resource access in .NET multi-threading 简介本文详细地描述一个定制的.NET类ThreadLockHelper(该类能在多线程环境下有效地共享资源),同时提供了.NET下多线程中资源共享及同步技术的概述。文中给出的helper类,将会帮助并简化.NET框

Jalor--拿来主义 2211

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

升鲜宝生鲜配送供应链管理系统,辅助开发工具,《多语言自动翻译与导出工具(WinForms版)》开发文档 及 阿里云机器翻译,数据库Mysql .net 全部源代码

本摘要简要描述了一款基于WinForms开发的多语言自动翻译与导出工具。该系统支持从MySQL数据库读取中文内容,通过阿里云机器翻译API自动生成繁体中文、英文、日文等多语言版本,具备完整的翻译流程控制、缓存机制和Excel导出功能。系统采用多线程并发翻译和自动限流设计,通过本地json文件实现翻译结果缓存,支持只翻译缺失语言以节省API调用次数。技术栈包括MySQL连接库、EPPlus Excel处理库和阿里云翻译SDK等,系统还提供详细的操作日志和进度显示功能。

升鲜宝生鲜配送供应链管理系统源代码,包括Java Spring Boot 后端API、B2B订货商城、采购协同助手、客户CRM、供应商协同端、司机配送端、安卓分拣端、PC端供应链客户端系统,门店收银系统源代码。 1068

快速理解.NET Framework[翻译]

快速理解.NET Framework[翻译] 原文:http://www.c-sharpcorner.com/Code/2004/May/WhitePapers_DotNetFramework.asp作者:Chandrakant P Parmar翻译:路亦平出处:http://www.c-sharpcorner.com/ 快速理解.NET Framework 引言 本文着眼于微软.NET

Scott Chan's Column 882

.NET Core/.NET之Stream简介 Rx.NET 简介

.NET Core/.NET之Stream简介 之前写了一篇C#装饰模式的文章提到了.NET Core的Stream, 所以这里尽量把Stream介绍全点. (都是书上的内容) .NET Core/.NET的Streams 首先需要知道, System.IO命名空间是低级I/O功能的大本营. Stream的结构 .NET Core里面的Stream主要是三个概念:...

847

. NET多线程编程

.NET多线程编程(1):多任务和多线程 [日期:2004-04-27] 来源:优快云 作者:younther(翻译) [字体:大 中 小] 在.NET多线程编程这个系列我们讲一起来探讨多线程编程的各个方面。首先我将在本篇文章的开始向大家介绍多线程的有关概念以及多线程编程的基础知识;在接下来的文章中,我将逐一讲述。NET平台上多线程编程的知识,诸如System.T...

weixin_30621711的博客 227

[翻译].NET牛人应该知道些什么

原文地址:http://www.hanselman.com/blog/WhatGreatNETDevelopersOughtToKnowMoreNETInterviewQuestions.aspx 作者:Scott Hanselman译者:Tony Qu 前些日子我发了一份ASP.NET面试题 清单. 有一些访客比较保守,觉得我是没事找事,里面都是些很琐碎的问题。剩下的人则说“蛮不错的,我得去看...

gtts 129
上一篇: 关于runat = “server”
下一篇: NET GridView中添加CheckBox取值问题
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值