背景 有个裙友要看看用 lambda 能不能在一行里定义出来 fib 函数,并且不要那个根号五的数学公式,于是就有了这篇文章。...def fib(n): if n in (1, 2): return 1 return fib(n-1) + fib(n-2) # 8 print(fib(6)) 通过...inspect 获取当前函数 我目前只知道 codeobject 配合 eval 来执行的方法,如下: import inspect def fib(): if n in (1, 2):...inspect}) + \ eval(inspect.currentframe().f_code, {'n': n-2, 'inspect': inspect}) # 8 print(eval(fib
一种做法是直接用欧拉降幂算出\(2^p \pmod{p - 1}\)然后矩阵快速幂。
a^0*b^1%p,a^1*b^1%p,…..a^fib[n-3]*b^fib[n-2]%p。即a,b的指数从n=3以后与fib数列一样。 由于n非常大。fib[n]也想当大。...a^fib[n]%p能够利用a^fib[n]%p = a^(fib[n]%phi[p]+phi[p])%p进行降幂,条件时fib[n]>=phi[p]。求fib[n]%phi[p]能够构造矩阵。...利用矩阵高速幂求fib[n]%phi[p]。...[t]%p转化为a^(fib[t]%phi[p]+phi[p])%p,fib[t] >= phi[p]。...fib[i] = fib[i-1] + fib[i-2]; if(fib[i] >= phi_p) break; } if(i <= t) //当满足条件
二、Linux 的路由实现 2.1 路由表 路由表(routing table)在内核源码中的另外一个叫法是转发信息库(Forwarding Information Base,FIB)。...err = fib_lookup(net, &fl4, &res); } 我们来看下 fib_loopup 都干了啥。...struct fib_result *res) { struct fib_table *table; table = fib_get_table(net, RT_TABLE_LOCAL...fib_table_lookup(table, flp, res, FIB_LOOKUP_NOREF)) return 0; table = fib_get_table(net, RT_TABLE_MAIN...三、路由的使用方法 3.1 开启转发路由 在默认情况下,Linux 上的转发功能是关闭的,这时候 Linux 发现收到的网络包不属于自己就会将其丢弃。
It's pre-compiled for Linux, macOS and Windows and packaged in the wheel format for each system and Python...Python 调用 C++ 的实现思路 Python 解释器不能直接调用 C++ 语言的源文件,但是只要我们把 C++ 的源文件编译成共享库(linux 平台的 so 文件,windows 平台的 dll...fib(n - 1) + fib(n - 2); } } 第二步 用 Python 的数据类型包装一下我们的函数 static PyObject *fib_wraper(PyObject *self...static PyMethodDef methods[] = { {"fib",fib_wraper,METH_VARARGS,"fib generator ."}, {0,0,0,0...methods }; PyMODINIT_FUNC PyInit_fibcpp(void) { return PyModule_Create(&module); } 编译 C++ 代码成库文件 我在 linux
ECMP在不同版本的Linux内核实现方式不一样,总体上可分为4个阶段。 内核版本ECMP功能< Pre kernel v2.2无ECMP。...); /* Race condition: route has just become dead. */ res->nh_sel = 0; } ``` ECMP在Linux.../kernel/git/torvalds/linux.git/commit/?.../kernel/git/torvalds/linux.git/commit/?...3-6-kernels https://serverfault.com/questions/820269/how-to-achieve-per-packet-multipath-routing-on-linux
DENT采用Linux作为网络操作系统的一个主要优势是,用于配置、管理和监控Linux服务器的工具也可以用来管理网络交换机。...fib_table_insert: call_fib_entry_notifiers(net, FIB_EVENT_ENTRY_ADD, key, plen, fi, new_fa->fa_tos...wops->fib4_add) return 0; return wops->fib4_add(rocker, fen_info); } ops 挂的 ofdpa_fib4..._add = ofdpa_fib4_add, .fib4_del = ofdpa_fib4_del, .fib4_abort = ofdpa_fib4_abort, };...参考链接 linux switchdev 介绍 & 源码 - 简书 Switchdev:释放开源Linux的网络力量_mob604756f52321的技术博客_51CTO博客 Linux switchdev
0; n < b.N; n++ { Fib(20) // run the Fib function b.N times } } 运行go test -bench=., 结果: goos: linux...-cpu=1,2,4 goos: linux goarch: amd64 BenchmarkFib20 50000 36877 ns/op BenchmarkFib20...-benchtime=3s goos: linux goarch: amd64 BenchmarkFib20-8 100000 46070 ns/op PASS...-count=10 goos: linux goarch: amd64 BenchmarkFib20-8 50000 38395 ns/op BenchmarkFib20.../fib2.test -bench=. -test.count=10 > old.txt ./fib.test -bench=.
今天的文章内容需要使用 Linux 和 macOS 系统实现。或者你也可以使用 Windows 10自带的 WSL2 Linux子系统。...把代码保存为fib.go,然后我们使用如下命令进行编译: go build -buildmode=c-shared -o _fib.so fib.go 这条命令指定了编译模式为c-shared,编译完成以后...,当前文件夹下面会生成一个_fib.so文件。.../_fib.so') fib = so.Fib start = time.time() result = fib(40) end = time.time() print(f'斐波那契数列第40项:{result...},耗时:{end - start}') 在这段代码里面,通过 Python 自带的ctypes模块,加载_fib.so文件,然后提取出里面的Fib函数。
Linux 中每个进程(线程)都是用 task_struct 来表示的。...*fib_main; struct fib_table *fib_default; //ip表 struct xt_table *iptable_filter; struct xt_table...3.1 进程与网络命名空间 Linux 上存在一个默认的网络命名空间,Linux 中的 1 号进程初始使用该默认空间。...//file: net/ipv4/fib_frontend.c static struct pernet_operations fib_net_ops = { .init = fib_net_init..., .exit = fib_net_exit, }; void __init ip_fib_init(void) { register_pernet_subsys(&fib_net_ops);
WebAssembly大致就是用C/C++之类的语言编译成.wasm文件,直接被js调用执行出bulit-in函数外,普遍性能的提升在50%以上 安装条件 直接上Emscripten Git CMake Linux...2.7.x git clone https://github.com/juj/emsdk.gitcd emsdkemsdk install latestemsdk activate latest# on Linux...1 } return fib(n - 2) + fib(n - 1) // 最暴力写法,可以极大的优化}const fibJs = () => { fib(20)}$.benchmark(fibJs...同样是递归每毫秒webassembly 3.5k次 emcc -s WASM=1 -O3 fib.c -o fib.js 加入编译优化上图 What?.../fib.js') // 引入wasm胶水层js代码function fib (n) { if (n < 2) { return 1 } return fib(n - 2) + fib(n
参考链接The IPv4 Routing Subsystem - Linux Kernel Networking: Implementation and Theory (2014) (apprize.best...)正文当我们使用cat /proc/net/fib_trie,会得到下述信息# cat /proc/net/fib_trieMain: +-- 0.0.0.0/0 3 0 4 +-- 0.0.0.0.../32 host LOCAL |-- 192.168.191.255 /32 link BROADCASTCopy/proc/net/fib_trie...文件提供了关于FIB(Forwarding Information Base,转发信息库)Trie(前缀树)的信息。...因此我们可以用下述命令查看ip信息awk '/32 host/ { print i } {i=$2}' /proc/net/fib_trie
我们拆解完了 Linux 网络包的接收过程,也搞定了网络包的发送过程。内核收发网络包整体流程就算是摸清楚了。...struct fib_result *res) { struct fib_table *table; table = fib_get_table(net, RT_TABLE_LOCAL); if...fib_table_lookup(table, flp, res, FIB_LOOKUP_NOREF)) return 0; table = fib_get_table(net, RT_TABLE_MAIN...fib_table_lookup(table, flp, res, FIB_LOOKUP_NOREF)) return 0; return -ENETUNREACH; } 在 fib_lookup...我们在 Linux 上使用命令名可以查看到这两个路由表, 这里只看 local 路由表(因为本机网络 IO 查询到这个表就终止了)。
在2020上半年,因为疫情无法返校,所以在家待了半年,期间学习一点了R语言、Python、Julia、linux和C语言,只是学习基础语法并没有项目练习,因此返校半年后差不多都不记得了,现在重新捡起...=45 n=50 R 37.1 409.1 +Inf Python 11.3 125.1 float('inf') Julia 0.2 2.6 29.6 注:单位为秒 首先是R语言版的斐波那契数列 fib...<- function(n) { if (n <= 2) { return(1) } return(fib(n - 1) + fib(n - 2)) } Python...版的斐波那契数列 def fib(n): if n <= 2: return 1 return fib(n-1) + fib(n-2) Julia版的斐波那契数列 function...fib(n::Int) if n <= 2 return 1 end return fib(n - 1) + fib(n - 2) end 测试设备 OS:
ff_ipfw add 100 fwd 192.168.1.3 tcp from 192.168.1.2 8081 to any in via f-stack-0 原文 《Nginx TCP 多证书透明代理及 Linux...), 并设置对应的网关地址 ff_route -p 0 add -net 0.0.0.0 10.10.10.1 -fib 10 ff_route -p 0 add -net 0.0.0.0 10.10.20.1...-fib 20 ff_route -p 0 add -net 0.0.0.0 10.10.30.1 -fib 30 # 将对应 VIP 发出去的数据包设置对应 vlan 的 fib num,以便使用正确的转发路由表...(fib) ff_ipfw -P 0 add 100 setfib 10 ip from 110.110.110.0/24 to any out ff_ipfw -P 0 add 200 setfib...120.120.120.0/24 to any out ff_ipfw -P 0 add 300 setfib 30 ip from 130.130.130.0/24 to any out 原文 《linux
fib_entry_create_special + 0x3c fib_table_entry_special_dpo_add + 0x154...fib_table_entry_special_add + 0x5c...+ 0x1ba fib_path_list_create + 0x6c...fib_entry_create + 0x51 fib_table_entry_update + 0x1b3...要使用它,我们需要使用LD_PRELOAD机制,如下: ~# LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libvppmem_preload.so /usr/bin/vpp
3.2 跨机数据接收 当数据包到达另外一台机器的时候,Linux 数据包的接收过程开始了(更详细的讲解可以看看《深入操作系统,从内核理解网络包的接收过程(Linux篇)》)。...fib_result *res) { struct fib_table *table; table = fib_get_table(net, RT_TABLE_LOCAL); if(!...fib_table_lookup(table, flp, res, FIB_LOOKUP_NOREF)) return 0; table = fib_get_table(net, RT_TABLE_MAIN...fib_table_lookup(table, flp, res, FIB_LOOKUP_NOREF)) return 0; return -ENETUNREACH; } 在 fib_lookup...我们在 Linux 上使用命令名可以查看到这两个路由表, 这里只看 local 路由表(因为本机网络 IO 查询到这个表就终止了)。
1 : fib(n - 1) + fib(n - 2); } // 功能测试 //int main(void) int test(void) { for (int i = 1; i <= 10...; i++) printf("fib[%d] = %d\n", i, fib(i)); return 0; } 编译测试,保证代码的正确性。...函数增加包裹函数 static PyObject *cai_fib(PyObject *self, PyObject *args) { // 用于存储从python传过来的参数 int...sources=['cai.c', 'cai_wrapper.c'])]) 运行setup.py python setup.py build 成功执行后,当前的目录结构为 会发现在build/lib.linux-x86..._64-2.7下生成了cai.so动态链接库, 可以将模块安装到全局python模块路径下,使用如下命令 python setup.py install 或者进入到build/lib.linux-x86
本文介绍一下l3xc插件,功能是将三层接口的所有入接口流量交叉连接输出到指定的FIB路径。此功能和在相同vrf中设置默认路由的效果差不多的。...在linux系统下配置往百度ip地址的明细路由通过tap0接口接入vpp。这样vpp中没有配置默认路由的情况下,通过配置l3xc从内核ping 百度地址可以正常ping通。...l3xc add tap0 via 192.168.1.1 GigabitEthernet2/6/0 +++++++++++++++++++++++++++++++++++++++++++++++ #设置linux...node节点*/ fib_node_init (&l3xc->l3xc_node, l3xc_fib_node_type); l3xc->l3xc_sw_if_index =...((FIB_PATH_LIST_FLAG_SHARED | FIB_PATH_LIST_FLAG_NO_URPF),
using_sys.py 参数1 参数2 Python 路径为: ['/root', '/usr/lib/python3.10', '/usr/lib/python3.10/plat-x86_64-linux-gnu...在交互式解释器中,输入以下代码: >>> import sys >>> sys.path ['', '/usr/lib/python3.10', '/usr/lib/python3.10/plat-x86_64-linux-gnu...__name__ 'fibo' 对于经常使用的函数,可以把它赋给一个本地的名称: >>> my_fib = fibo.fib >>> my_fib(500) 1 1 2 3 5 8 13 21 34 55...函数,使用如下语句: >>> from fibo import fib, fib_new >>> fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377 这个声明不会把整个...fibo模块导入到当前的命名空间中,它只会将fibo里的fib函数引入进来。
领取专属 10元无门槛券
手把手带您无忧上云