zoukankan      html  css  js  c++  java
  • 进程,线程,同步 ,异步

    SQL:
    1 引用完整性(主表约束字表)
    设置表间关联 ,添加表约束,设置外键 ,
    设计-关系-表和列规范-添加表间键关系, 外键表:(操作的是需要设置外键的表),主键表:(主键被设置成外键的表)
    内连接 inner join on
    select a.productID as 产品编号,a.Name 产品名字,a.Producer 产商,b.Name as 类型名称,b.Remark 标语
    from Production as a inner join ProductType as b on a.ProductTypeID=b.ProductTypeID

    外连接:
    左外连接 left (outer) join on 保证左边数据完整
    右外连接 right(outer) join on 保证右边数据完整
    C# 进程,多线程,同步,异步
    计算机概念
    进程:程序运行在服务器,占用计算机资源的合集
    进程之间不会相互干扰-进程通信比较困难
    线程:程序执行的最小单位,响应操作最小的执行流
    线程也包含自己的计算资源,线程是属于进程的
    一个进程可以有多个线程
    多线程:一个进程有多个线程并发执行
    C#
    多线程Thread类,就是一个封装,是.NetFramework对线程对象的抽象封装
    通过Thread去完成操作,最终是通过向操作系统得到执行流
    currentThread:当前线程-任何操作都是线程完成的,运行当前这句话的线程
    ManagedThreadID:.Net平台给Thread起的名字,就是int值
    同步单线程方法:按顺序执行,每次调用完成才能进入下一行,是一个线程
    异步多线程:离不开委托,发起调用,不等待结束就进入下一行(主线程)
    动作会由新线程来执行(子线程),并发了;
    1 同步单线程卡界面,主线程忙于计算,所以不能响应
    异步多线程不卡界面,主线程已经闲置了,计算任务交给了子线程
    cs:按钮后不卡死,上传文件不卡死;
    bs:用户注册发邮件/发短信/写日志
    2 同步单线程 只有一个线程计算
    异步多线程快 多个线程并发计算
    多线程就是用资源换性能
    3 无序性-不可预测性
    启动无序,几乎同一时间向操作系统请求线程 也是个cpu需要处理的请求
    执行时间不确定,同一个线程同一个任务耗时也不相同
    其实跟操作系统的调度策略有关,CPU分片(计算能力强,宏观上就是多并发了--线程优先级可以影响cpu调度)
    4 结束无序

    使用多线程时,不用通过延时等方式掌控顺序,也不要试图“风骚的多模式”掌控顺序

    解决多线程的不可预测性

    5不允许没有监控的项目上线,需要在业务操作后记录日志

    异步回调方法;
    Action.Invoke() 同调
    Action.BeginInvoke() 异调

    通过设置AsyncCallback委托类型callback 这个变量,设置参数类型为IAsyncResult类型


    阻塞当前线程 :
    IsCompleted 用来描述异步是否完成
    虽然可以控制顺序,但是会出现界面卡死

    信号量无延迟 awynacResult.AsyncWaitHandle.WaitOne();-1一直等待,1000,最多等待1000毫秒
    阻塞当前线程,直到收到信号量从asynaResult发出,无延迟
    1.0 Thread 的 API 特别丰富;
    线程资源是操作系统管理的,响应并不灵敏
    Thread启动线程没有控制,可能导致死机;
    Thread就像给一个四岁小孩一把热武器,虽然威力很大但是造成破坏威力很大
    2.0 ThreadPool 池化资源管理设计思想,线程是一种资源,之前每次要用线程,就去申请一个线程,使用之后就释放掉;池化就是一个容器,容器提前申请好,程序
    需要线程,直接找容器获取,用完再放回容器,避免频繁的申请和销毁,容器还会根据限制的数量去申请和释放
    线程复用,可以限制最大线程数量;
    ThreadPool.QueueUserWorkItem(callback)
    API太少,线程等待顺序控制特别弱;实战不方便
    3.0 Task被称为多线程的最佳实践
    1,Task线程全部是线程池 2,提供了丰富的API,非常适合开发实践
    Task专题解析
    多线程 API不难,难在恰如其分的使用
    提高效率,这些任务可以独立并发的执行
    //数据库查询10条数据需要10s,不能多线程优化
    Task.WaitAll();阻塞当前线程,直到全部任务结束;
    Task.WaitAny();阻塞当前线程,直到某一个完成,取消阻塞
    1、 尽量不要线程套线程
    TaskFactory.ContinnueWhenAll(,);
    TaskFactory.ContinnueWhenAny(,);
    continue的后续线程,可能是新线程,可能是完成任务的线程,可能是同一个线程,但是肯定不是主线程
    线程是不可预测的;

    Paralle 可以启动多线程,主线程也参与计算,节约一个线程
    Paralle.invoke();
    可以通过ParallelOptions控制最大并发数量
    await async

  • 相关阅读:
    怎样获取当前文档的域名
    怎样获取当前网页的URL
    怎样获取所有style节点
    怎样获取所有的script节点
    怎样获取所有的embed节点对象
    怎样获取页面中的所有图片节点
    怎样获取页面中的表单元素节点
    怎样获取页面中所有带href属性的标签集合
    怎样获取当前页面内的全屏状态的元素节点
    怎样获取当前页面的焦点聚焦元素节点
  • 原文地址:https://www.cnblogs.com/xiaobing1/p/11484700.html
Copyright © 2011-2022 走看看