几天前,需要以编程方式确定一艘飞船的机器正常运行时间。嗯,问题很简单(GetTickCount[64]),但结果却很奇怪:虽然我早上打开了车,但很自信地得出正常运行时间超过一天的结论,表明昨天早上。我查看了任务管理器窗口中的相同值。
重新启动 - 一切正常,数据正确。但他开始追随。
连续几天,它都显示正常,在所有机器关闭的情况下都能正常工作。
昨晚,像往常一样,我通过“关机”关闭了机器。今天早上她告诉我——我从昨天早上就开始工作了!
会是什么呢?某种我没有要求的冬眠?我怎样才能确定?
几天前,需要以编程方式确定一艘飞船的机器正常运行时间。嗯,问题很简单(GetTickCount[64]),但结果却很奇怪:虽然我早上打开了车,但很自信地得出正常运行时间超过一天的结论,表明昨天早上。我查看了任务管理器窗口中的相同值。
重新启动 - 一切正常,数据正确。但他开始追随。
连续几天,它都显示正常,在所有机器关闭的情况下都能正常工作。
昨晚,像往常一样,我通过“关机”关闭了机器。今天早上她告诉我——我从昨天早上就开始工作了!
会是什么呢?某种我没有要求的冬眠?我怎样才能确定?
(function(){
...(много других функций)
})();
我用两种语言编写了相同的代码:
import os
file1 = open("z1.txt", "w")
file2 = open("z2.txt", "w")
for x in range(-1000, 1000):
for y in range(-1000, 1000):
z1 = (x + y) * (x + y)
z2 = x * y
args = str(x) + "\t" + str(y) + "\t"
toFile1 = args + str(z1) + "\n"
toFile2 = args + str(z2) + "\n"
file1.write(toFile1)
file2.write(toFile2)
file1.close()
file2.close()
package main
import (
"os"
"strconv"
)
func main() {
file1, _ := os.Create("z1.txt")
file2, _ := os.Create("z2.txt")
for x := -1000; x < 1000; x++ {
for y := -1000; y < 1000; y++ {
z1 := (x + y) * (x + y)
z2 := x * y
args := strconv.Itoa(x) + "\t" + strconv.Itoa(y) + "\t"
toFile1 := []byte(args + strconv.Itoa(z1) + "\n")
toFile2 := []byte(args + strconv.Itoa(z2) + "\n")
file1.Write(toFile1)
file2.Write(toFile2)
}
}
file1.Close()
file2.Close()
}
一个意外的惊喜——在 golang 上,最坏情况下运行时间为 12 秒,而在 python 中则为 7 秒。在平均情况下,go 也远远落后,大约进行了 30 次运行。此外,golang 本身在该程序中以 2 个线程工作,这似乎可以加快写入两个文件的速度。
我怀疑我在 Go 中错误地使用了太低级的函数,并决定在 C 中实现相同的代码:
#include "stdio.h"
int main(){
FILE* f1 = fopen("z1.txt","w");
FILE* f2 = fopen("z2.txt","w");
for (int x =-1000; x <1000;++x ){
for(int y =-1000; y <1000;++y ){
int z1 = (x+y)*(x+y);
int z2 = x*y;
fprintf(f1,"%d\t%d\t%d\n",x,y,z1);
fprintf(f2,"%d\t%d\t%d\n",x,y,z2);
}
}
fclose(f1);
fclose(f2);
return 0;
}
这里没有什么令人惊讶的——它会在瞬间完成所有事情。好吧,我尝试了 GoS 实现,它变得更糟 - 平均 22 秒。
package main
import (
"fmt"
"os"
)
func main() {
file1, _ := os.Create("z1.txt")
file2, _ := os.Create("z2.txt")
for x := -1000; x < 1000; x++ {
for y := -1000; y < 1000; y++ {
z1 := (x + y) * (x + y)
z2 := x * y
fmt.Fprintf(file1, "%d\t%d\t%d\n", x, y, z1)
fmt.Fprintf(file2, "%d\t%d\t%d\n", x, y, z2)
}
}
file1.Close()
file2.Close()
}
接下来,我尝试优化 Go 中的代码并写入文件 1 次,而不是循环写入,并将缓冲区存储在一行中,我在 Python 中做了同样的事情,但没有任何改变,我无法理解出了什么问题,为什么 golang 在这项任务上落后了。
带 Go 手写缓冲区的版本:
package main
import (
"os"
"strconv"
)
func main() {
file1, _ := os.Create("z1.txt")
file2, _ := os.Create("z2.txt")
var toFile1 string
var toFile2 string
for x := -1000; x < 1000; x++ {
for y := -1000; y < 1000; y++ {
z1 := (x + y) * (x + y)
z2 := x * y
args := strconv.Itoa(x) + "\t" + strconv.Itoa(y) + "\t"
toFile1 += (args + strconv.Itoa(z1) + "\n")
toFile2 += (args + strconv.Itoa(z2) + "\n")
}
}
file1.Write([]byte(toFile1))
file2.Write([]byte(toFile2))
file1.Close()
file2.Close()
}
如果可能的话,请给出详细的答案,而不是“在go中还有一个额外的动作——转换为字节”。先感谢您)
python3 Python 3.10.12(主要,2023 年 11 月 20 日,15:14:05)[GCC 11.4.0] 在 Linux 上键入“help”、“copyright”、“credits”或“license”以获取更多信息。
go版本go1.21.6 linux/amd64
大家好!我想制作一个立方体,当你将光标悬停在它上面时,它的边缘应该分开。您还需要在其边缘制作带有文本的箭头,当您悬停时,箭头应沿着其边缘移开,新文本将出现在下方。
.wrap {
width: 1920px;
position: relative;
margin-top: 400px;
perspective: 1000px;
perspective-origin: 50% 50%;
}
.leg {
position: relative;
width: 0px;
height: 100px;
border: 1px solid black;
}
.fr,
.sc,
.th {
position: relative;
}
.indicator {
top: -85px;
left: -170px;
position: absolute;
}
.line {
position: absolute;
overflow: hidden;
height: 300px;
/* transform: rotate(45deg); */
}
.text {
position: absolute;
top: -120px;
width: 100px;
}
.h-line {
width: 100px;
border: 1px solid black;
}
.d-line {
margin-left: 86.5px;
margin-top: 34px;
width: 100px;
border: 1px solid black;
transform: rotate(45deg);
}
.cube {
margin: auto;
position: relative;
height: 200px;
width: 200px;
transform-style: preserve-3d;
}
.cube>div {
position: absolute;
box-sizing: border-box;
padding: 10px;
height: 100%;
width: 100%;
opacity: 0.9;
background-color: #000;
border: solid 1px #eeeeee;
color: #ff0000;
}
.legs {
left: -65px;
margin-top: 240px;
position: absolute;
display: flex;
flex-direction: row;
gap: 70px;
}
.sc {
margin-left: 152px;
}
.th {
margin-top: -78px;
}
.third {
margin-top: 78px;
}
.front {
transform: translateZ(100px);
}
.front--1 {
transform: translateZ(100px);
}
.back {
transform: translateZ(-100px) rotateY(180deg);
}
.right {
transform: rotateY(-270deg) translateX(100px);
transform-origin: top right;
}
.right--1 {
transform: rotateY(-270deg) translateX(100px);
transform-origin: top right;
}
.left {
transform: rotateY(270deg) translateX(-100px);
transform-origin: center left;
}
.top {
transform: rotateX(-270deg) translateY(-100px);
transform-origin: top center;
}
.top--1 {
transform: rotateX(-270deg) translateY(-100px);
transform-origin: top center;
}
.bottom {
transform: rotateX(270deg) translateY(100px);
transform-origin: bottom center;
}
.wrap:hover .front {
transform: translateZ(200px) translateX(-200px);
/* margin-left: -200px;
transition: 0.3s ease-in; */
background-color: #fcf;
}
.wrap:hover .right {
transform: rotateY(-270deg) translateZ(150px) translateX(150px);
}
.wrap:hover .top {
transform: rotateX(-270deg) translateZ(120px) translateY(-100px);
}
.wrap:hover .bottom {
transform: rotateX(270deg) translateZ(100px) translateY(100px);
}
.wrap:hover .legs {
transform: translateY(100px);
transition: transform 0.3s ease-in;
}
.wrap:not(:hover) .legs {
transform: translateY(0);
transition: transform 0.3s ease-in;
}
.wrap:hover .first {
margin-top: 20px;
transition: 0.3s ease-in;
}
.wrap:not(:hover) .first {
margin-top: 0;
transition: 0.3s ease-in;
}
.wrap:hover .second {
margin-top: 12px;
transition: 0.3s ease-in;
}
.wrap:not(:hover) .second {
margin-top: 0;
transition: 0.3s ease-in;
}
.wrap:hover .third {
margin-top: -7px;
transition: 0.3s ease-in;
}
.wrap:not(:hover) .third {
margin-top: 0;
transition: 0.3s ease-in;
}
.wrap:hover .text {
top: 5px;
transition: 0.3s ease-in;
}
.wrap:not(:hover) .text {
top: -120px;
transition: 0.3s ease-in;
}
.cube>div {
transition: transform 0.3s ease-in;
}
.cube {
transform: rotateX(-15deg) rotateY(-25deg);
}
<div class="wrap">
<div class="cube">
<div class="front">
<div class="indicator">
1
<div class="line">
<div class="h-line"></div>
<span class="text">текст текст текст текст текст текст текст текст текст текст текст текст</span>
</div>
<div class="d-line"></div>
</div>
Front side
</div>
<div class="front--1">
Front side
</div>
<div class="top">
<div class="indicator">
2
<div class="line">
<div class="h-line"></div>
<span class="text">текст текст текст текст текст текст текст текст текст текст текст текст</span>
</div>
<div class="d-line"></div>
</div>
Top side
</div>
<div class="top--1">
Top side
</div>
<div class="bottom">
<div class="indicator">
3
<div class="line">
<div class="h-line"></div>
<span class="text">текст текст текст текст текст текст текст текст текст текст текст текст</span>
</div>
<div class="d-line"></div>
</div>
Bottom side
</div>
<div class="right">
<div class="indicator">
4
<div class="line">
<div class="h-line"></div>
<span class="text">текст текст текст текст текст текст текст текст текст текст текст текст</span>
</div>
<div class="d-line"></div>
</div>
Right side
</div>
<div class="right--1">
Right side
</div>
<section class="legs">
<div class="fr">
<div class="first leg"></div>
<div class="indicator">
4
<div class="line">
<div class="h-line"></div>
<span class="text">текст текст текст текст текст текст текст текст текст текст текст текст</span>
</div>
<div class="d-line"></div>
</div>
</div>
<div class="sc">
<div class="second leg"></div>
<div class="indicator">
4
<div class="line">
<div class="h-line"></div>
<span class="text">текст текст текст текст текст текст текст текст текст текст текст текст</span>
</div>
<div class="d-line"></div>
</div>
</div>
<div class="th">
<div class="third leg"></div>
<div class="indicator">
4
<div class="line">
<div class="h-line"></div>
<span class="text">текст текст текст текст текст текст текст текст текст текст текст текст</span>
</div>
<div class="d-line"></div>
</div>
</div>
</section>
</div>
</div>
文本箭头不应与其所附着的立方体面位于同一平面,而应始终位于用户的正前方。
预先感谢您的合作!)
如何在不知道宏参数类型的情况下使用 fprintf() 显示宏参数 __VA_ARGS__ 的值
#define LOG(M, ...) fprintf(stderr, "[INFO] %s [%d]: %s /*__VA_ARGS__?*/\n", __FILE__, __LINE__, M)