只是试图在那里ping一些经验丰富的线程专家...试图在没有很多实际代码问题的情况下学习更多关于线程的知识,这将有助于我更多地练习它。
我已经有了一些资源,但可能还有一些我不知道的优点:
所以:
1)正在寻找其他人(视频,书籍等)以及您对上述资源的看法(您会推荐某些更好或者过时/不好吗?)。
2)此外,由于这是一个广泛且高度复杂的话题......作为一个完整的外国人,我正试图缩小某种理智的研究列表。线程是深入的,因此我只想介绍它们可能触及的基础知识或最可能的区域(锁定,线程安全等)。作为专家,我不需要进行这次采访......只是表明我对何时使用它,常见场景以及我可以向他们解释的几个例子并不完全无能为力。
3)任何有线程经验的人都会给我一些好的资源,或者给我一些你认为我最应该注意的好的学习技巧或领域?
4)显然,随着.NET 4.0的出现彻底改变了一些事情,但我主要关注的是.NET 3.5。我需要先了解THREADING的基本知识......概念,需要注意的事项,锁定,线程安全的单例(我知道John Skeet关于Singletons的页面等)。
5)另一件可以帮助我的事情是真实世界的例子和使用线程的理由。 IIS端,OOP端,服务器场等都有。我想知道一些在真实应用中使用线程或常见场景的真实例子,你真正需要开始使用线程。
我不需要每个人都回答我在这里的所有5个方面......即使是上述1-5中的一个建议也会非常感激。
...谢谢
更新/免责声明(在收到一些关于我的假设后)
不,我不会去那里声称我知道线程或者是它的专家,但是我是一个初学者,并且在过去的工作中只做了几件事并且还在学习。但我确实想说明为什么我在这里发布整个帖子的背景,这样你就可以帮助我在更短的时间内更好地磨练...过滤掉可能更好的路径,这样我就不会浪费我的时间既可以用于面试,也可以用于我未来的学习。
答案 0 :(得分:2)
线程似乎很容易学习。你只需使用new Thread(ThreadFunc).Start()
,瞧,你正在使用线程。这有多难,对吧?
线程问题不是你会直接注意到的东西,而是在你最不期望的时候偷偷摸摸的东西。当有一些负载并偶尔关闭系统时,它们通常会进入生产系统。
过了一段时间,您会发现在修改共享数据之前需要进行同步。当你开始这样做时,你会看到一个大的性能降低。
线程很容易上手,但需要数年才能掌握。保护共享数据是一门艺术,需要经过深思熟虑才能正确完成。我已经编写了多年的多线程服务器,包括带有IO完成端口的C ++和最近的C#。我仍然犯错,可能会在我的服务器上产生意想不到的结果。
至于你需要学习的主题:
Thread
类查看一些示例。 lock
关键字。Semaphore
和ReaderWriterLock
Interlocked
类。我通常将这种模式用于Thread
函数:
public class Example
{
ManualResetEvent _myEvent = new ManualResetEvent(false);
Thread _myThread;
bool _isRunning = true;
public Example()
{
_myThread = new Thread(WorkerFunc);
_myThread.Start();
}
public void WorkerFunc()
{
while (_isRunning)
{
try
{
_myEvent.Wait(Timeout.Infinite);
_myEvent.Reset();
ActualFunc();
}
catch (ThreadAbortException) { return; }
catch (Exception err)
{
_logger.Error("Thread func failed, lucky we caught it so the server don't die..", err);
}
}
}
public void Stop()
{
_isRunning = false;
_myEvent.Set();
_myThread.Join();
}
public void DoWork()
{
//add some work to the thread job queue or something
_myEvent.Set();
}
private void ActualFunc()
{
//actual thread work is done here
// in a seperate method to keep everything clean.
}
}
在答案中写到这里,不要保证它会100%有效:)
答案 1 :(得分:1)
对线程http://www.albahari.com/threading/的精彩介绍 虽然在.NET 4.0中引入了新的线程模式和技术,甚至在C# 5.0预览中,但对于潜入主题来说,这将是一个很好的介绍。
您还应该阅读有关线程池的信息。