多线程和异步的一些看法
本文章是小弟的处女文章.以前只在园子里看文章.
正方开始
在工作中有一个项目由于写文件操作比较频繁
以前用的是同步写文件方式,有人提出要多线程写文件.
多线程写文件的任务分给别一个同事,
因别一个同事对多线程方面不太熟 我给他提供了下面这种试
//多线程操作同步写文件方法
public ThreadOperate()
{
Thread t = new Thread(new ThreadStart(ThreadProc));
t.Start();
}
//同步写文件方法
public static void ThreadProc()
{
}
public ThreadOperate()
{
Thread t = new Thread(new ThreadStart(ThreadProc));
t.Start();
}
//同步写文件方法
public static void ThreadProc()
{
}
后来看了一些资料 http://dev.yesky.com/135/3030135.shtml (多核时代对并发程序设计的探索)
总结了下面这句:
线程: 需要操作系统投入CPU资源来运行和调度
异步: 无须消耗CPU时间的操作 如 I/O操作不仅包括了直接的文件、网络的读写,还包括数据库操作、Web Service、HttpRequest以及.net Remoting等跨进程的调用。
目前还不能很确定 上面这句是否正确. 请指点.
根据上面那句话我的想法改变了,我认为用异步写文件比多线程更合适于是用了下面方式
//异步写文件
public void WriteFile()
{
FileStream fs = new FileStream(@"C:\Test.txt", FileMode.Create,FileAccess.Write, FileShare.Write);
byte[] buffer = new byte[100];
for (int i = 0; i < buffer.Length; i++)
{
buffer[i] = 2;
}
fs.BeginWrite(buffer, 0, buffer.Length, FileCallBack, fs);
}
static void FileCallBack(IAsyncResult asyncResult)
{
FileStream fs = asyncResult.AsyncState as FileStream;
if (fs != null)
{
fs.EndWrite(asyncResult);
fs.Close();
}
}
public void WriteFile()
{
FileStream fs = new FileStream(@"C:\Test.txt", FileMode.Create,FileAccess.Write, FileShare.Write);
byte[] buffer = new byte[100];
for (int i = 0; i < buffer.Length; i++)
{
buffer[i] = 2;
}
fs.BeginWrite(buffer, 0, buffer.Length, FileCallBack, fs);
}
static void FileCallBack(IAsyncResult asyncResult)
{
FileStream fs = asyncResult.AsyncState as FileStream;
if (fs != null)
{
fs.EndWrite(asyncResult);
fs.Close();
}
}