I've recently discovered weird behaviour of EV-loop timers.
First in Tarantool, and now in Perl libev.
Subj:
When asking EV-loop to sleep for 1ms, it does 1.2ms when requesting to sleep for 2ms, it does 2.4ms,
| <!DOCTYPE html> | |
| <html lang="ru"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <title>Тестики :)</title> | |
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| <link rel="stylesheet" href="style.css"> | |
| </head> | |
| <body> | |
| <div class="page"> |
| func partition(nums1 []int, nums2 []int) (int, int) { | |
| n1 := len(nums1) | |
| n2 := len(nums2) | |
| half := (n1+n2) >> 1 | |
| // n1 ≤ n2 => n1 ≤ half=(n1+n2)>>1 ≤ n2 | |
| // i want to have left part ≤ right part | |
| // now, I split nums1 and nums2 in a way such as: | |
| // [0;m1)+[m1;n1+1) and [0;m2)+[m2;n2+1) |
| func listenUnix(socket_path string) (*net.UnixListener, error) { | |
| addr, err := net.ResolveUnixAddr("unix", socket_path) | |
| if err != nil { | |
| return nil, err | |
| } | |
| fi, err := os.Lstat(socket_path) | |
| switch { | |
| case os.IsNotExist(err): | |
| return net.ListenUnix("unix", addr) |
| local setmetatable, type, pairs, rawget = setmetatable, type, pairs, rawget | |
| local copy do | |
| pcall(require, 'table.new') | |
| local table_new = rawget(table, 'new') or function(_, _) return {} end | |
| function copy(t) | |
| local new_t = table_new(0, 8) | |
| for k, v in pairs(t) do new_t[k] = v end | |
| return new_t |
| use strict; | |
| use warnings; | |
| use feature 'say'; | |
| use Module::CoreList; | |
| use Pod::Simple::SimpleTree; | |
| use List::Util qw(first); | |
| # 1 - only standard level modules | |
| # 2 - mostly all packages | |
| # 3 - subpackages of packages |
| #!/usr/bin/env tarantool | |
| local json = require('json') | |
| local cluster_config = require('internal.config.cluster_config') | |
| local scalars = {} | |
| scalars.string = { | |
| jsonschema = { | |
| type = 'string', |
| use std::collections::HashMap; | |
| use serde::{Deserialize, Serialize}; | |
| use tarantool::{self, session, tuple::Encode}; | |
| use mlua::Lua; | |
| #[tarantool::proc] | |
| fn add(left: i64, right: i64) -> i64 { | |
| left + right | |
| } |
| -- Tarantool 3.0.2-0-gf9e82c5 Darwin-arm64-RelWithDebInfo | |
| local fiber = require 'fiber' | |
| local clock = require 'clock' | |
| local log = require 'log' | |
| box.cfg{checkpoint_count = 1,listen=3301} | |
| box.ctl.promote() | |
| require 'jit'.on() | |
| fiber.top_enable() |
| --[[ | |
| cpu limit is like leaking bucket. | |
| we say that we want to limit this iterator to consume ≤10% cpu. | |
| Caller: | |
| - ev(), real() | |
| - gen_x(param_x, state_x) | |
| - ev(), real() |