同步

同步异步、阻塞非阻塞

天大地大妈咪最大 提交于 2021-02-02 04:51:23
同步与异步:一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能完成,这是一种可靠的任务序列。 阻塞与非阻塞:主要是从CPU的消耗上来说的,阻塞就是CPU停下来等待一个慢的操作完成以后,CPU才接着完成其他事情。 同步阻塞:最常用的一种用法,使用也是最简单的,但是I/O性能一般很差,CPU大部分处于空闲状态。 同步非阻塞:提升I/O性能的常用手段,就是将I/O的阻塞改为非阻塞方式,尤其在网络I/O是长连接同时传输数据也不是很多的情况下,提升性能非常有效。这种方式通常能提升I/O性能,但是会增加CPU消耗,要考虑增加的I/O性能能不能补偿CPU的消耗,也就是系统的瓶颈是在I/O还是在CPU上。 异步阻塞:这种方式在分布式数据库中经常用到,例如,在一个分布式数据库中写一条记录,通常会有一份是同步组撒的记录,而还有两至三份备份记录会写在其他机器上,这些备份记录通常都采用异步阻塞的方式写I/O。异步阻塞对网络I/O能够提升效率,尤其像上面这种同时写多份相同数据的情况。 异步非阻塞:这种组合方式用起来比较复杂,只有在一些非常复杂的分布式情况下使用,集群之间的消息同步机制一般用这种I/O组合方式。如Cassandra的Gossip通信机制就是采用异步非阻塞的方式,他适合同时要传多份数据到集群中不同机器,同事数据的传输量虽然不大但是却非常频繁。这种网络I

【翻译】Understanding SynchronizationContext

浪子不回头ぞ 提交于 2021-01-07 08:38:01
原文: http://www.codeproject.com/Articles/31971/Understanding-SynchronizationContext-Part-I 理解 SynchronizationContext SynchronizationContext - MSDN Lets You Down 我也不知道为什么,但实际上事实就是这样——.NET框架中没有太多的对这个类描述。MSDN文档也只有少量的关于如何使用SynchronizationContext的信息。我必须说, 为了理解和学习如何使用它 ,我经历了一段痛苦的时间。通过阅读大量的相关文章,我终于理解了这个类的意图以及怎么正确的使用它。现在,我决定把写下这偏文章 ,不管它能不能帮助到你。 Using SynchronizationContext to Marshal Code from One Thread to Another Let's get some technical points out of the way so we can show how to use this class,通过SynchronizationContext,可以使两个线程之间通信。假设现在有 2个线程,Thread1 和 Thread2。Thread1 正在工作,现在Thread1 想让Thread2执行一段代码

Java I/O 模型的演进

混江龙づ霸主 提交于 2020-11-27 04:54:55
原文同步至 http://waylau.com/java-io-model-evolution/ 什么是同步?什么是异步?阻塞和非阻塞又有什么区别?本文先从 Unix 的 I/O 模型讲起,介绍了5种常见的 I/O 模型。而后再引出 Java 的 I/O 模型的演进过程,并用实例说明如何选择合适的 Java I/O 模型来提高系统的并发量和可用性。 由于,Java 的 I/O 依赖于操作系统的实现,所以先了解 Unix 的 I/O 模型有助于理解 Java 的 I/O。 相关概念 同步和异步 描述的是用户线程与内核的交互方式: 同步 是指用户线程发起 I/O 请求后需要等待或者轮询内核 I/O 操作完成后才能继续执行; 异步 是指用户线程发起 I/O 请求后仍继续执行,当内核 I/O 操作完成后会通知用户线程,或者调用用户线程注册的回调函数。 阻塞和非阻塞 描述的是用户线程调用内核 I/O 操作的方式: 阻塞 是指 I/O 操作需要彻底完成后才返回到用户空间; 非阻塞 是指 I/O 操作被调用后立即返回给用户一个状态值,无需等到 I/O 操作彻底完成。 一个 I/O 操作其实分成了两个步骤:发起 I/O 请求和实际的 I/O 操作。 阻塞 I/O 和非阻塞 I/O 的区别在于第一步,发起 I/O 请求是否会被阻塞,如果阻塞直到完成那么就是传统的阻塞 I/O ,如果不阻塞

SqlServer2008的同步处理(发布,订阅)

南楼画角 提交于 2020-04-15 16:18:51
【推荐阅读】微服务还能火多久?>>> 有一台虚拟机上的sql server 2008的老数据库老化严重,计划废弃,迁移出来统一部署。2008的SqlServer自带了一个数据同步功能,那就是发布与订阅。 老数据库IP:192.168.2.85 新数据库IP:192.168.2.86 发布是在85上执行,订阅可以在85上做,也可以在86上做。在85上做订阅相当于push更新的数据,而在86上做相当于pull老数据库上更新的数据。 具体过程可以参考: http://www.cnblogs.com/daizhj/archive/2009/11/18/1605293.html 中间需要注意的是, 1.发布有4种类型:快照,事务,可更新事务,合并发布。我这边用的快照,需要设置间隔时间定期传播到订阅服务器。 2.发布支持数据库的基本对象,table,view,procedure,用户自定义的对象以及DDL操作的相关修改都能传播的订阅服务器上。 3.大数据量的订阅发布要按增量去处理,按全量更新很容易卡死和造成堵塞。 4.订阅时去选择发布服务器,因为限制了IP选项,需要在本地的hosts文件中做相关的映射。 5.对习惯看TSQL的人也可以在发布和订阅时查看同步生成的脚本文件。 限制: 1.对发布的项目数和表列数等有限制 2.加密的过程函数,视图,触发器等不能复制 3.XML类型的更改不能被复制 4

Java高级-线程同步机制实现

半腔热情 提交于 2020-04-15 05:48:30
【推荐阅读】微服务还能火多久?>>> 前言 我们可以在计算机上运行各种计算机软件程序。每一个运行的程序可能包括多个独立运行的线程(Thread)。 线程(Thread)是一份独立运行的程序,有自己专用的运行栈。线程有可能和其他线程共享一些资源,比如,内存,文件,数据库等。 当多个线程同时读写同一份共享资源的时候,可能会引起冲突。这时候,我们需要引入线程“同步”机制,即各位线程之间要有个先来后到,不能一窝蜂挤上去抢作一团。 同步这个词是从英文synchronize(使同时发生)翻译过来的。我也不明白为什么要用这个很容易引起误解的词。既然大家都这么用,咱们也就只好这么将就。 线程同步的真实意思和字面意思恰好相反。线程同步的真实意思,其实是“排队”:几个线程之间要排队,一个一个对共享资源进行操作,而不是同时进行操作。 关于线程同步,需要牢牢记住的第一点是 :线程同步就是线程排队。同步就是排队。线程同步的目的就是避免线程“同步”执行。这可真是个无聊的绕口令。 关于线程同步,需要牢牢记住的第二点是 :“共享”这两个字。只有共享资源的读写访问才需要同步。如果不是共享资源,那么就根本没有同步的必要。 关于线程同步,需要牢牢记住的第三点是 :只有“变量”才需要同步访问。如果共享的资源是固定不变的,那么就相当于“常量”,线程同时读取常量也不需要同步。至少一个线程修改共享资源,这样的情况下

CentOS 6.5 、Win7(32位) 双系统 时间同步设置

允我心安 提交于 2020-04-12 17:34:56
先贴上网上的解决方案: CentOS 6.3与Windows7(64位)的时间同步设置 然后记录下自己的方案: 注 :自己的windows系统是 32位 的,上面解决方案的windows系统是 64位 的;不知道是不是这个原因,自己的解决方案跟上面的解决方案略有不同。 因为之前修改过BIOS硬件时间(看上面解决方案),所以只记录与上面解决方案的不同之处,具体还是请看上面解决方案的吧.... 不同之处: 自己的:/etc/adjtime 文件最后一行是 LOCAL ,也就是让CentOS把硬件时间当成localtime当地时间 上面解决方案的:/etc/adjtime 文件最后一行是 UTC ,也就是让CentOS把硬件时间当成UTC 世界标准时间 来源: oschina 链接: https://my.oschina.net/u/872371/blog/200545

hbase:用于实现版本文件及配置同步的两个shell脚本

落爺英雄遲暮 提交于 2020-04-07 03:26:15
复制master节点上的版本内容到所有slaves节点上 注意: 1:版本目录做了软链接,如 ln -s hbase-0.94.6 hbase 2: 要根据实际情况,将/usr/local/修改为hbase所在的目录 #!/bin/bash # copy a new release of HBase from the masternode to all slave nodes # Rsyncs HBase files across all slaves. Must run on master. # Assumes all files are located in /usr/local if [ "$#" != "2" ]; then echo "usage: $(basename $0) <dir-name> <ln-name>" echo " example: $(basename $0) hbase-0.1 hbase" exit 1 fi SRC_PATH="/usr/local/$1/conf/regionservers" for srv in $(cat $SRC_PATH); do echo "Sending command to $srv..."; rsync -vaz --exclude='logs/*' /usr/local/$1 $srv:/usr/local/

我在工作中使用的同步协作工具

守給你的承諾、 提交于 2020-03-17 01:26:53
某厂面试归来,发现自己落伍了!>>> 我在工作中使用的同步协作工具 ###声明 版权所有,转载注明出处 ###先列个工具清单 百度云盘 印象笔记 ###再讲讲使用体会 ####百度云盘 好东西,免费而且容量大,使用就送你2个TB,估计我这辈子都够用了.各个平台的客户端都有. 或许你会想到腾讯的微云,呵呵,我的容量有11TB,但是我基本上用不到.为什么呢?因为大家都在用百度网盘,方便共享. 金山网盘可以直接嵌入windows资源管理器中,实时同步.可以让我无视有个网盘存在.虽然方便,但有时候会出毛病,无法同步成功.在连续两次让我失望后,我就放弃使用它了. ####离线下载 这个功能几乎所有的网盘都有.对于外站地址下载软件,我都是先使用离线后在存到本地,这样速度快. 然而我觉得UC网盘的离线下载功能最NB,百度离线无法下载的你可以试一试UC离线,你懂的! ####印象笔记 大文件上传到百度云,小文件和文档存到笔记里面. WPS和offic的同步用不惯,还是印象笔记给力,谁用谁知道. 笔记黑科技: 存微信,微博文章 剪藏网页 邮件保存 具体怎么用,搜一下就知道了. 笔记同步类应用我用过两个,另一个是有道云笔记.我刚开始用的是有道云笔记,免费的,后来放弃了.我想说我是一名程序员,当我把代码从Eclipse复制到笔记中后,我就傻了:对齐格式没了,语法高亮没了.这就相当于把一个美女整成了丑八怪

java集合框架总结(七)

僤鯓⒐⒋嵵緔 提交于 2020-03-02 02:18:53
一、Collections 简介 Collections 是一个操作 Set、List 和 Map 等集合的工具类 Collections 中提供了大量方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象设置不可变、对集合对象实现同步控制等方法 二、相关操作 排序操作 reverse(List):反转 List 中元素的顺序 sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序 sort(List,Comparator):根据指定的 Comparator 产生的顺序对 List 集合元素进行排序 查找,替换 Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素 Object max(Collection,Comparator):根据 Comparator 指定的顺序,返回给定集合中的最大元素 Object min(Collection):根据元素的自然顺序,返回给定集合中的最小元素 Object min(Collection,Comparator):根据 Comparator 指定的顺序,返回给定集合中的最小元素 int frequency(Collection,Object):返回指定集合中指定元素的出现次数 boolean replaceAll(List list,Object oldVal,Object

Java多线程基础篇(03)-synchronized关键字

本秂侑毒 提交于 2020-02-28 21:19:46
1.引言 基本上所有的并发模式再解决线程冲突的时候,都是采用 序列化访问共享资源 的方案。这意味着在给定时刻只允许一个任务访问共享资源。通常这是通过在代码前面添加一条锁语句来实现的,这就使得在一段时间内只有一个任务可以运行这段代码。因为锁语句产生了一种互相排斥的效果,锁着这种机制常常被称为 互斥量。 Java以提供关键字synchronized的形式,为防止资源冲突提供了内置支持。当任务要执行被synchronized关键字保护的代码片段的时候,它将检查锁是否可用,然后获取锁,执行代码,释放锁 共享资源一般是以对象形式存在的内存片段,但也可以是文件、输入/输出端口,或者是打印机设备。要控制对共享资源的访问,得先把它包装进一个对象。然后把所有要访问这个资源的方法标记为synchronized。如果某个任务处于一个对标记为synchronized方法的调用中,那么在这个线程从该方法返回之前,其他所有要调用类中任何标记synchronized方法的线程都会被阻塞。 2.synchronized原理 在Java中,每一个对象有且仅有一个同步锁。这也意味着,同步锁依赖对象而存在。当我们调用某个对象的synchronized修饰的方法时,就获取了该对象的同步锁。例如synchronized(obj)方法就获取了obj这个对象的同步锁。 不同线程对同步锁的访问是互斥的。也就是说,在某一个时刻