PHP配合swoole应该是可以实现的多线程的。
swoole是PHP的协程高性能网络通信引擎,提供了多种通段档信协议的网络服务器和客户端模块。包括:
TCP/UDP/UnixSocket服务器
Http/WebSocket/Http2.0服务器端
异步/同步TCP/UDP网络客户端
异步MySQL
异步Redis
AsyncTask
毫秒定时器
异步文件读写
异步DNS查询
Http客户端
除了异步IO的支持之外,为多进程的渗亮模式设计了多个并发数据结构和IPC通信机制,可以大大简化多进程并发丛燃宽编程的工作。其中包括了:
并发原子计数器
并发HashTable
内存通道Channel
锁Lock
进程间通信IPC
可以广泛应用于互联网、移动通信、企业软件、网络游戏、物联网、车联网、智能家庭等领域。
其中战旗直播,虎牙直播。都用到了swoole开发。
原因分析:android系统中处理用户 *** 作的工作时在主线程中执行的,如果我们的程序在主线程中进行一些耗时的 *** 作,导致用户的 *** 作6秒不能够处理团升,就会出现异常。主线程休眠,那么再点击程序,必须等主线程睡醒后才会反应。
所以在主拿闭线程中不要做太耗时的工作,因为主界面会阻塞。
解决办法:让这些耗时的 *** 作放在新线程里面 *** 作。
注意:如果新线程里面做的事情要更新界面的话,就要使用handler来 *** 作。
连接网络的事都要放在新线程消或裂里面的。
解决代码(包括更新界面的 *** 作,使用的是handler):
import android.app.Activity
import android.os.Bundle
import android.os.Handler
import android.view.View
import android.widget.TextView
import android.widget.Toast
public class MainActivity extends Activity {
private TextView numTV
private Handler handler = new Handler()
private int i
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main)
numTV = (TextView) findViewById(R.id.numTV)
}
public void doSomething(View view) throws Exception {
new Thread() {
public void run() {
for (i = 1i <20i++) {
handler.post(new Runnable() {
public void run() {
numTV.setText(i + "")
}
})
System.out.println(i)
try {
Thread.sleep(1000)
} catch (InterruptedException e) {
e.printStackTrace()
}
}
}
}.start()
}
public void toast(View view) {
Toast.makeText(this, "十八大开幕了!", 0).show()
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)