zoukankan      html  css  js  c++  java
  • 多线程和异步的一些看法

    多线程和异步的一些看法

    zengjun.cnblogs.com

    本文章是小弟的处女文章.以前只在园子里看文章.
    正方开始

    在工作中有一个项目由于写文件操作比较频繁
    以前用的是同步写文件方式,有人提出要多线程写文件.
    多线程写文件的任务分给别一个同事,
    因别一个同事对多线程方面不太熟 我给他提供了下面这种试

    //多线程操作同步写文件方法
        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();
                   
               }

            }

  • 相关阅读:
    JS变量的作用域
    使用jquery修改css中带有!important的样式属性
    js异步加载的三种解决方案
    js 停止事件冒泡 阻止浏览器的默认行为(阻止超连接 # )
    【翻译】MongoDB指南/CRUD操作(二)
    【翻译】MongoDB指南/CRUD操作(一)
    【翻译】MongoDB指南/引言
    深入浅出UML类图(一)
    让thinkphp 5 支持pathinfo 的 nginx ,去掉index.php
    linux 常用命令
  • 原文地址:https://www.cnblogs.com/cclinux/p/637862.html
Copyright © 2011-2022 走看看