面试中遇到的一个关于线程的问题,希望有大神给予帮助,蟹蟹

问题是这样问的:面试的公司是一家保险公司,如果想要实现一下功能:用户在PC端提交表单的同时,服务器需要立刻向客户的手机发送一些短信消息,中间间隔的时间越短越好,请问用多线程怎么解决这个问题?作为一个小学生,我表示有些蒙圈

"中间间隔的时间越短越好"
这个应该是主要需求, 提交表单以后, 服务器可能要做一些IO操作或者其他的逻辑操作. 如果等这些稍微费时的操作执行完成后再发信息给用户可能有些延迟.
这里用异步的做法.
服务端有主逻辑线程 A, 再开一个负责IO(数据库操作等等)的线程 B ,再开一个负责发短信的进程 C.
表单提交后, A直接把这个IO或者逻辑操作丢给 B, 并且立即返回认为已经成功了,这时再把发信息的任务丢给C认为已经成功了.
应该是异步的思想 ,异步的坑点就不讨论了

我也是菜鸟说说我的想法

【1】首先处理这个发短信的后台线程优先级应该尽可能高。
这样可以保证发短信作业会更容易抢占cpu,会尽快执行。

【2】对于任何一个用户来说,发送消息这个作业耗时基本上一样,所以应该采用先来先服务的策略对发短信作业进行执行。
这样能保证先发出请求的用户先得到相应,时间间隔也就比较短。

【3】再加一些buffer,,比如,第一个线程来需要组装发短信的内容,执行发短信的动作,也会创建许多对象用于操作
把组装的内容能够重用的部分保存到buffer中,创建的对象也别急着销毁,继续使用(这是懒加载,还可以再启动时初始化这些东西,长期保存)

有问题还可以讨论,,

用线程池,那样就能节约创建线程的时间,应该是最快的

和多线程没有什么关系,应该是消息事务队列,如果有很高的并发,可以再在队列后部署负载均衡。

这个如果用易语言来写很简单,易语言可以直接调用另一个单独的线程来执行单独的程序,你可以把源程序分开,然后用两个线程执行,毫无影响。

接收消息后,直接开个线程进行回复。。。