代码拉取完成,页面将自动刷新
;;(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))
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。