文档章节

淘点点面试固定延时后发送短信息的问题

飞奔的蜗牛仔
 飞奔的蜗牛仔
发布于 2015/10/28 19:52
字数 585
阅读 281
收藏 0

先说4chan上的睡眠排序,思路是依次遍历数组。将值作为线程睡眠时间,然后后输出此值。乍一听,哎呦,不错呦!下面评论来了句你要我排序{1,999999999}排多久?


项目中经常遇到业务需固定时间后发生某项动作的需求。这项业务的前提条件是发生有序的,根本用不着排序,你多线程也是当前时间+固定时间后执行,所以往队列里或缓存中不用排序。


然后说执行的问题,有的说要心跳每秒,更有的还说60秒一档。60秒一档的,你说1秒插入的和59秒插入的一块公平吗?

我做的项目是创业O2O,没那么多人次也没那么多机器 。  

我的做法是这样:

生产者:

   订单生成的时候,当前时间加上固定时间后,和订单Id一起放入线程安全的阻塞队列中。

消费者:

订单固定时间后处理采用的是单线程(没那么多访问量嘛)。线程while(true)访问阻塞队列。当获取到值时,拿当前时间和获取到的时间做差,结果小于等于0时直接执行后续任务,结果大于0时,线程睡眠这个结果后直接执行后续任务

public void run() {
      try {
	     while (true) {
		 OrderNode order = OrderOverTimeQueue.poll();
		  if (order != null) {
		     long temp = //当前时间-订单动作执行时间;
			if (temp>0) {
			  Thread.sleep(temp);
			} 
			//执行动作
	           }
		} catch (Exception e) {
					//。。。。。。。。
		}
}


后来遇到问题,如果固定时间后执行的动作在未执行的这段时间内如果需要取消怎么办。我采用的方法是需取消动作的订单把信息放入另一个线程安全的集合中,供动作执行前进行最后的判断。当然你也可以去队列里查和线程加上线程标识符来取消动作。 

如果往可大可大的大数据,高并发方向吹的话,阻塞队列换成redis,消费者线程换成可伸缩的线程池。






© 著作权归作者所有

上一篇: Hello World
下一篇: Hello World
飞奔的蜗牛仔
粉丝 1
博文 2
码字总数 587
作品 0
海淀
程序员
私信 提问
加载中

评论(1)

_森屿海巷_
_森屿海巷_
也谈淘点点60s短信订单的架构设计

看到了这个 http://www.oschina.net/question/926166_2137672 然后有人写了博客还分析设计了一下 http://my.oschina.net/u/926166/blog/522227 本人最近对架构设计较感兴趣,下面是我的设计,...

xue777hua
2015/10/27
7.2K
52
AT指令对wavecom串口GSM工业手机发送短信(英文和PDU短信)

一、英文短信 发:AT 收:OK 发:AT+CMGF=1 收:OK 发:AT+CMGS=13602433649 收:> 发:data→ //test 为发送内容,→为发送符(ctrl+z,十六进制0x1A) 收:+CMGS: 54OK 二、中文PDU短信 本文...

金笛子
2015/11/18
52
0
关于淘点点面试中碰到的架构设计问题?

此题是面试淘点点的问题,由于没经验所以败在这个题目下面,因此请权威人士指点 指点,谢谢。。 问题描述:让您做一个电商平台,您如何设置一个在买家下订单后的”第60秒“发短信通知卖家发货...

Ambitor
2015/10/16
8.8K
21
mysql读取并发问题

这么一种情况,两个客户端对mysql进行操作,要求A客户端读a信息后,不允许B客户端再次读取a信息,然后A客户端对a信息进行操作修改,之后B客户端才可以读取他。 实际情况:数据库存放短信,两...

冰封
2012/05/16
1K
5
退订无门,垃圾短信猖獗谁能治得了?

  QQ、微信的普及算是彻底革了短信的命,如今绝大部分人还在依赖短信的,无非是用来接收验证码、快递通知以及银行等部分服务信息。正因如此,我们也一直以来忍受着如狗皮膏药一般甩不掉的垃...

FreeBuf
2018/05/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Python 周刊第 418 期

新闻 PyCon US 2020 开始接受财务赞助! https://pycon.blogspot.com/2019/10/financial-aid-launches-for-pycon-us-2020.html2020年 Python 美国开发者大会,tips: 中国也有,可以赞助国内的...

iCodeBugs
5分钟前
1
0
ThreadLocal源码阅读

首先,从set方法入手, // ThreadLocalpublic void set(T value) { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t);//这里可以看出,从Threa......

小海bug
14分钟前
2
0
成长之路 万事知行合一

思想决定行为,行为决定习惯,习惯决定性格,性格决定命运。 很多道理,不管是前辈给你指点说的也好,还是你自己看一些书籍学到的也好,如果不能够做到,就连那些不知道这个道理的人都不如。...

T型人才追梦者
17分钟前
2
0
uml图六种箭头的含义

在看一些技术博客的时候,经常会见到博客里画上很多uml图。因为经常会被这几种表达关系的箭头搞混,这里我就把常见的6种箭头表达的含义理一下。 泛化 概念:泛化是一种一般与特殊、一般与具体...

1只特立独行的猪
24分钟前
2
0
【在 Nervos CKB 上做开发】Nervos CKB 脚本编程简介[3]:自定义代币

原文作者:Xuejie 原文链接:https://xuejie.space/2019_09_06_introduction_to_ckb_script_programming_udt/ Nervos CKB 脚本编程简介[3]:自定义代币 CKB 的 Cell 模型和 VM 支持许多新的用...

NervosCommunity
58分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部