没有合适的资源?快使用搜索试试~ 我知道了~
一、I/O线程实现对文件的异步 1.1 I/O线程介绍: 对于线程所执行的任务来说,可以把线程分为两种类型:工作者线程和I/O线程。 工作者线程用来完成一些计算的任务,在任务执行的过程中,需要CPU不间断地处理,所以,在工作者线程的执行过程中,CPU和线程的资源是充分利用的。 I/O线程主要用来完成输入和输出的工作的,在这种情况下, 计算机需要I/O设备完成输入和输出的任务,在处理过程中,CPU是不需要参与处理过程的,此时正在运行的线程将处于等待状态,只有等任务完成后才会有事可做, 这样就造成线程资源浪费的问题。为了解决这样的问题,可以通过线程池来解决这样的问题,让线程池来管理线程,前面已
资源推荐
资源详情
资源评论

















C#线程处理系列之线程池中的线程处理系列之线程池中的I/O线程线程
一、一、I/O线程实现对文件的异步线程实现对文件的异步
1.1 I/O线程介绍:线程介绍:
对于线程所执行的任务来说,可以把线程分为两种类型:工作者线程和I/O线程。
工作者线程用来完成一些计算的任务,在任务执行的过程中,需要CPU不间断地处理,所以,在工作者线程的执行过程
中,CPU和线程的资源是充分利用的。
I/O线程主要用来完成输入和输出的工作的,在这种情况下, 计算机需要I/O设备完成输入和输出的任务,在处理过程中,CPU
是不需要参与处理过程的,此时正在运行的线程将处于等待状态,只有等任务完成后才会有事可做, 这样就造成线程资源浪
费的问题。为了解决这样的问题,可以通过线程池来解决这样的问题,让线程池来管理线程,前面已经介绍过线程池了, 在
这里就不讲了。
对于I/O线程,我们可以将输入输出操作分成三个步骤:启动、实际输入输出、处理结果。用于实际输入输出可由硬件完成,
并不需要CPU的参与,而启动和处理结果也可以不在同一个线程上,这样就可以充分利用线程资源。在.Net中通过以Begin开
头的方法来完成启动,以End开头的方法来处理结果,这两个方法可以运行在不同的线程,这样我们就实现了异步编程了。
1.2 .Net中如何使用异步中如何使用异步
注意:
其实当我们调用Begin开头的方法就是将一个I/O线程排入到线程池中(调用Begin开头的方法就把I/O线程加入到线程池中管理
都是.Net机制帮我们实现的)。
(因为有些人会问什么地方用到了线程池了,工作者线程由线程池管理很好看出来,因为创建工作者线程直接调用
ThreadPool.QueueUserWorkItem方法来把工作者线程排入到线程池中)。
在.net Framework中的FCL中有许多类型能够对异步操作提供支持,其中在FileStream类中就提供了对文件的异步操作的方
法。
FileStream类要调用I/O线程要实现异步操作,首先要建立一个FileStream对象。
通过下面的构造函数来初始化FileStream对象实现异步操作(异步读取和异步写入):
public FileStream (string path, FileMode mode, FileAccess access, FileShare share,int bufferSize,bool useAsync)
其中path代表文件的相对路径或绝对路径,mode代表如何打开或创建文件,access代表访问文件的方式,share代表文件如
何由进程共享,buffersize代表缓冲区的大小,useAsync代表使用异步I/O还是同步I/O,设置为true时,说明使用异步I/O.
下面通过代码来学习下异步写入文件:
using System;
using System.IO;
using System.Text;
using System.Threading;
namespace AsyncFile
{
class Program
{
static void Main(string[] args)
{
const int maxsize = 100000;
ThreadPool.SetMaxThreads(1000,1000);
PrintMessage("Main Thread start");
// 初始化FileStream对象
FileStream filestream = new FileStream("test.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite,
100, true);
//打印文件流打开的方式
Console.WriteLine("filestream is {0} opened Asynchronously", filestream.IsAsync ? "" : "not");
byte[] writebytes =new byte[maxsize];
string writemessage = "An operation Use asynchronous method to write message.......................";
writebytes = Encoding.Unicode.GetBytes(writemessage);
Console.WriteLine("message size is: {0} byte", writebytes.Length);
资源评论


weixin_38715721
- 粉丝: 5
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 电气自动化技术专业教学团队推荐表.doc
- 2023年公共关系学网络终考题库2.doc
- 移动通信技术的发展.doc
- 计算机网络技术专业培养计划.doc
- 商业计划书(上海润金软件有限公司交易助理项目).doc
- 医学统计学第十六章--Logistic回归分析.ppt
- 基于PLC的自动摆饼机控制系统的设计及实现(顾小强).ppt
- 粤教版网络技术应用教材与教学研讨市公开课一等奖百校联赛特等奖课件.pptx
- 互联网金融个体网络借贷资金存管业务规范.docx
- 解读云计算与云数据存储发展趋势技术研究.doc
- 综合布线建设方案.doc
- 基于C51单片机的数字时钟课程设计C语言,带闹钟.doc
- 谭浩强C语言第13章.ppt
- 大学生网络利用调查报告.doc
- 2023年学员做试卷中小学教师融合教育知识网络竞赛.docx
- 互联网项目商业计划书模板.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
