Ai
1 Star 0 Fork 0

烟波/cl-gserver

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
bench-stripped.lisp 1.68 KB
一键复制 编辑 原始数据 按行查看 历史
;;(ql:quickload "lparallel")
;;(ql:quickload "bordeaux-threads")
(use-package :lparallel)
(defparameter *msgbox-kernel* nil)
(defparameter *msgbox-channel* nil)
(defparameter *counter* 0)
(defparameter *called* 0)
(defparameter +threads+ 8)
(defparameter +per-thread+ 50)
(defun max-loop () (* +per-thread+ +threads+))
(format t "Times: ~a~%" (max-loop))
(defun submit-msg-sr ()
(let* ((lparallel:*kernel* *msgbox-kernel*)
(channel *msgbox-channel*))
(lparallel:submit-task channel
(lambda ()
(1+ *counter*)))
(setf *counter* (lparallel:receive-result channel))))
(defun submit-msg-fut ()
(let* ((lparallel:*kernel* *msgbox-kernel*)
(fut (lparallel:future
(incf *counter*)
*counter*)))
(force fut)))
(defun runner (submit-fun)
(setf *msgbox-kernel* (lparallel:make-kernel 1))
(let ((lparallel:*kernel* *msgbox-kernel*))
(setf *msgbox-channel* (lparallel:make-channel)))
(setf lparallel:*kernel* (lparallel:make-kernel +threads+))
(setf *counter* 0)
(unwind-protect
(time
(map nil #'lparallel:force
(mapcar (lambda (n)
(lparallel:future
(dotimes (n +per-thread+)
(funcall submit-fun))))
(loop for n from 1 to +threads+ collect n))))
(format t "Counter: ~a~%" *counter*)
(sleep 1)
(format t "Counter: ~a~%" *counter*)
(lparallel:end-kernel :wait t)
(let ((lparallel:*kernel* *msgbox-kernel*))
(lparallel:end-kernel :wait t))))
(defun runner-sr ()
(runner #'submit-msg-sr))
(defun runner-fut ()
(runner #'submit-msg-fut))
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Common Lisp
1
https://gitee.com/macro/cl-gserver.git
git@gitee.com:macro/cl-gserver.git
macro
cl-gserver
cl-gserver
master

搜索帮助